ScalaTest v3:为什么需要实现convertToLegacyEqualizer?

16

使用ScalaTest 3.0.0

环境: Scala 2.11.8, sbt 0.13.5, IntelliJ 14.1.4

build.sbt中只有

// NOTE: not using org.scalactic
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"

以下测试已通过。 然而,在MyMiniTest下方,IntelliJ标记了一个红色的波浪线,并显示以下警告消息:

类'MyMiniTest'必须声明为抽象或实现abstract成员'convertToLegacyEqualizer [T](left:T):TripleEqualsSupport.this.LegacyEqualizer [T]'中的其中一个,在'org.scalactic.TripleEqualsSupport'中


import org.scalatest.FeatureSpec

class MyMiniTest extends FeatureSpec {
  scenario("A simple test") {
    val a = 12
    assert(a * 3 == 36)
  }
}

这个警告的原因是什么?有什么推荐的解决方案来修复它吗?
3个回答

6

我在IntelliJ上也遇到了同样的问题,只需按照这些步骤来使缓存失效/重新启动即可。这将解决问题。


我认为(但不确定)我已经尝试过使IntelliJ缓存失效/重新启动。由于我们决定暂时回退到Scalatest 2.2.5,所以再次尝试这个需要一些时间。感谢您的帮助。下次我们有机会升级Scalatest时,我会再次尝试这个方法。 - Polymerase
谢谢,这对我很有帮助! - Oviron
清除缓存并重启,甚至删除.idea文件和所有的target文件夹,重新打开项目也无法解决这个问题。 - Sergio Pelin

2
在我的情况下,这是一个传递依赖项(不知道为什么测试库会出现在这样的情况下),与项目中定义的依赖项发生冲突。SBT 知道如何处理大多数这些情况,但 IntelliJ 似乎不知道。请注意,在此情况下,无效化缓存并重新启动 IntelliJ 是无法解决问题的。 要确保这是您的情况,请检查以下内容:文件 -> 项目结构 -> [项目设置 - 库]。查找 org.scalatest:*,您可能会找到两个库,如下所示: enter image description here 然后通过选择它并在面板顶部按-来删除不必要的库。就这样,IntelliJ 就会很高兴了。
更干净的解决方案是从您的依赖项中排除不必要的库,例如: ExclusionRule("org.scalatest", "scalatest_2.11-2.2.4") IntelliJ 将显示该库作为项目的依赖项,但会知道应将其忽略。

从库部分中删除多余的org.scalatest解决了我的问题。 - Shirish Kumar

0
请检查您的所有依赖项,并检查是否有任何依赖项正在下载org.scalatest.*。如果您定义的org.scalatest.*版本与由其他定义的依赖项下载的版本不同,则会出现此问题。 我使用了org.mockito%mockito-scala,其pom定义了提供scalatest 3.0.8。但我定义的scalatest是2.2.5。通过将scalatest的版本更改为3.0.8,我能够解决这个问题。
希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接