Intellij将不运行ScalaTests-“;不兼容的类更改错误“;

Intellij将不运行ScalaTests-“;不兼容的类更改错误“;,scala,intellij-idea,scalatest,Scala,Intellij Idea,Scalatest,我正在尝试在intellij中为基于sbt的Scala应用程序运行测试。但我得到了以下错误,我不知道如何修复: Testing started at 21:07 ... java.lang.IncompatibleClassChangeError: Found class scala.collection.mutable.ArrayOps, but interface was expected at org.scalatest.tools.Runner$.checkArgsForVali

我正在尝试在intellij中为基于sbt的Scala应用程序运行测试。但我得到了以下错误,我不知道如何修复:

Testing started at 21:07 ...
java.lang.IncompatibleClassChangeError: Found class scala.collection.mutable.ArrayOps, but interface was expected
    at org.scalatest.tools.Runner$.checkArgsForValidity(Runner.scala:895)
    at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:729)
    at org.scalatest.tools.Runner$.run(Runner.scala:711)
    at org.scalatest.tools.Runner.run(Runner.scala)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:144)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
当我用Junit runner属性装饰我的类时,它们工作得很好(实际上,从视觉效果上来说,它是一个更好的运行方式):


这似乎是scala测试运行程序框架的一个问题。我遇到了同样的问题;最终,正如您所建议的,最终使用junit test runner使其工作。但在我的例子中,问题是它引入了一个可传递的依赖项,并且没有这样的类错误。

确保用于JUnitRunner的库是相同的。大多数情况下,“不兼容的类更改错误”是由于向后兼容而发生的。还可以在编译和运行scala库jar时查看一下。

我在尝试为Play Framework应用程序运行测试时遇到了相同的错误。深入研究堆栈跟踪,我发现问题类是FakeRequest,它位于play测试库中。我有两个不同版本的库,一个用于播放2.4,另一个用于播放2.3。我可以通过删除Play2.3的播放测试版本(打开模块设置->库->查找并删除坏的依赖项)来解决这个问题


您的问题可能与其他一些有问题的依赖项有关,但按照上述相同的步骤可能有助于解决此问题。

您是否尝试过
sbt clean&&sbt gen idea
、删除常春藤缓存、重新启动Intellij等?当您运行
sbt test
时,它是否有效?
@RunWith(classOf[JUnitRunner])