Intellij不会运行ScalaTests - “不兼容的类更改错误”

时间:2013-06-15 20:10:29

标签: 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$.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属性装饰我的类时,它们工作得很好(实际上它在视觉效果方面更好):

@RunWith(classOf[JUnitRunner])

3 个答案:

答案 0 :(得分:1)

尝试为Play Framework应用程序运行测试时遇到了同样的错误。深入到堆栈跟踪中,我发现问题类是FakeRequest,它位于游戏测试库中。我有两个不同版本的库,一个用于Play 2.4,另一个用于2.3。通过删除Play 2.3的播放测试版本(打开模块设置 - >库 - >查找并删除不良依赖项),我能够解决此问题。

您的问题可能与其他一些有问题的依赖关系,但遵循上述相同的步骤可能有助于解决它。

答案 1 :(得分:0)

这似乎是scala测试运行器框架的一个问题。我遇到了同样的问题;最终像你建议最终使用junit test runner来使它工作。但是我的问题是它引入了传递依赖而没有这样的类错误。

答案 2 :(得分:0)

确保库用于JUnitRunner的库是相同的。由于向后兼容性,大多数时候出现“不兼容的类更改错误”。并且在编译和运行时还要查看scala库jar。