单元测试与 maven 一起工作良好,但在与 IntelliJ 一起使用时不会 运行

Unit tests working well with maven but won't run when using them with IntelliJ

我在 Scala 项目中有一些单元测试,当使用 mvn clean test 运行 它们时工作正常(scalatest-maven-plugin 版本 1.0)。

但是,当我尝试使用 IntelliJ UI 来 运行 它们时,我得到了这个错误:

objc[56331]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java (0x10f8774c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x1102d24e0). One of the two will be used. Which one is undefined.
java.lang.IllegalArgumentException: ERROR: -r has been deprecated for a very long time and is no longer supported, to prepare for reusing it for a different purpose in the near future. Please change all uses of -r to -C.
    at org.scalatest.tools.ArgsParser$.checkArgsForValidity(ArgsParser.scala:41)
    at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:857)
    at org.scalatest.tools.Runner$.run(Runner.scala:850)
    at org.scalatest.tools.Runner.run(Runner.scala)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:131)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:28)

可能这与我在 pom.xml 中的依赖项有关。它依赖于我在一个单独的项目中开发的工件。如果我删除该依赖项,此错误就会消失。

我需要这种依赖,但我不知道它有什么问题。 Maven 工作正常,但我想访问 IntelliJ 中的调试器。

有什么建议吗?我现在 运行 没有想法,Google 到目前为止没有给我任何有用的东西。

另外,其他同事也出现了同样的情况,所以我怀疑是不是我本地配置的问题。

提前致谢!

"scalatest" 库不喜欢 IntelliJ 调用它的方式。

尝试在 IntelliJ 中更新您的 Scala 插件?

更新:

我已经对 IntelliJ 和 Scalatest 的源代码进行了一些挖掘(两者都可以在上面显示的堆栈跟踪中看到):

1) Scalatest 拒绝了 IntelliJ 在这里传递的这个“-r”参数:

https://github.com/scalatest/scalatest/blob/b97f944f4a2690744c26dc875097407baba7e21d/scalatest/src/main/scala/org/scalatest/tools/ArgsParser.scala#L41

2) 传递参数“-r”的 IntelliJ 代码在这里:

https://github.com/JetBrains/intellij-scala/blob/88317c1dd8a8cd6b8578adc17c1ead36a2a5a77a/scala/runners/src/org/jetbrains/plugins/scala/testingSupport/scalaTest/ScalaTestRunner.java#L131

请注意,这不是最新版本的 IntelliJ scala 插件。

有趣的是,“-r”参数仅在这段代码设置为 isOlderScalaTestVersion true(见第 94 行)时传递,这似乎是检测到的 ScalaTest 版本为 1.x(见第 261 行)

所以我目前的猜测(没有重现案例的好处)是关于你的链接库的某些东西导致 IntelliJ Scala 插件认为你正在使用 ScalaTest 1.x,但实际上你正在使用 ScalaTest 3.x?链接库是否对旧的 ScalaTest 具有传递依赖性?