9

我正在尝试在 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])
4

3 回答 3

2

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

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

于 2015-12-28T19:02:46.947 回答
0

确保您用于 JUnitRunner 的库是相同的。大多数时候“不兼容的类更改错误”是由于向后兼容性而发生的。并在编译和运行时查看 scala library jar。

于 2015-02-16T13:42:05.913 回答
0

这似乎是 scala 测试运行器框架的问题。我遇到了同样的问题;最终就像您建议的那样,最终使用 junit 测试运行程序使其工作。但就我而言,问题在于它引入了传递依赖,并且没有此类错误。

于 2014-02-21T20:58:06.160 回答