ScalaTest v3:为什么需要实现convertToLegacyEqualizer

时间:2016-10-07 20:00:27

标签: scala intellij-idea scalatest

使用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"

以下测试通过。但是,IntelliJ在MyMiniTest下面标记了一条波浪形的红线,并带有警告消息:

  

类'MyMiniTest'必须声明为abstract或实现   抽象成员'convertToLegacyEqualizer [T](左:T):   TripleEqualsSupport.this.LegacyEqualizer [T]'in   'org.scalactic.TripleEqualsSupport'

import org.scalatest.FeatureSpec

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

此警告的原因是什么,以及建议的解决方案是什么?

3 个答案:

答案 0 :(得分:6)

我在IntelliJ上遇到同样的问题,只需按this steps使缓存/重启无效。这将解决问题。

答案 1 :(得分:2)

在我的情况下,这是一个不同版本的传递性依赖项(不知道测试库的外观如何)与我项目中定义的依赖项冲突。 SBT知道如何处理大多数情况,IntelliJ似乎并不知道。 请注意,在这种情况下,使缓存无效并重新启动IntelliJ将无济于事。

为确保满足您的要求,请检查以下内容:文件->项目结构-> [项目设置-库] 。寻找org.scalatest:*,您可能会发现两个库,如下所示: enter image description here

然后通过选择不必要的对象并按面板顶部的-来删除它们。就是这样,IntelliJ现在会很高兴。

更清洁的解决方案是从依赖项中exclude删除不必要的库,例如: ExclusionRule("org.scalatest", "scalatest_2.11-2.2.4")

IntelliJ将在项目的依赖项中显示该库,但会知道应该对其进行加密。

答案 2 :(得分:0)

请检查所有依赖项,并检查其中是否有任何依赖项正在下载org.scalatest.*。如果由于其他定义的依赖性,您定义的org.scalatest.*的版本与下载的版本不同,则会发生此问题。 我使用的org.mockito%mockito-scala的pom定义提供了scalatest 3.0.8。但是我定义的最严格的标准是2.2.5。通过将scalatest的版本更改为3.0.8,我能够解决此问题。

希望这会有所帮助。