【问题标题】:Unit tests working well with maven but won't run when using them with IntelliJ单元测试在 maven 上运行良好,但在与 IntelliJ 一起使用时无法运行
【发布时间】:2019-10-16 23:07:24
【问题描述】:

我在 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 也没有给我任何有用的东西。

另外,其他同事也有同样的情况,所以我怀疑这与我的本地配置有关。

提前致谢!

【问题讨论】:

  • 你能发一个repro吗?
  • 很遗憾,没有。由于我无法确定是哪个部分导致它并且无法共享公司代码... IntellyJ 执行的命令行:/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java “- javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=64581:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "" org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner -s mypackage.myclass -C org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestReporter -showProgressMessages true

标签: scala maven intellij-idea scalatest


【解决方案1】:

“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) 通过 arg "-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 有传递依赖?

【讨论】:

  • 感谢您的想法。我已将 Scala 插件更新到 v2019.1.8。事实上,我已经将整个 IntelliJ 版本更新到最新版本,希望能解决这个问题……到目前为止还没有运气。无论如何感谢您的建议。
  • 只是添加一些东西,我不确定这是否是 intellij 调用 scalatest 的方式,因为它适用于其他项目(如果提到的依赖项被删除,也适用于这个项目)。
  • 非常感谢您提供的资源,它们真的很有帮助。我认为错误在于:String version = jar.getManifest().getMainAttributes().getValue("Bundle-Version"); in isOlderScalaTestVersion() 方法。 version 被评估为null,然后在runScalaTest1 和/或runScalaTest2 中添加-r 选项。我将继续尝试找出为什么要评估为null
  • 非常感谢您的帮助!你在哪里,“版本”是空的,因为我有一个已经包含 scalatest 工件的依赖项。我已将该项目中的代码更改为在 pom.xml 中使用带有<scope>test</scope> 的scalatest,但它不能完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多