我试图运行以下示例单元测试用例
class ExampleUnitTest {
@Test
fun addition_is_Correct() {
assertEquals(4, (2 + 2).toLong())
}
}
但我得到以下异常
Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
即使我已经更新了所有Junit依赖项build.gradle文件,如下所示
testImplementation 'junit:junit:4.12'
testImplementation 'org.jetbrains.spek:spek-api:1.1.5'
testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
testImplementation 'org.junit.platform:junit-platform-launcher:1.0.0'
testImplementation 'org.junit.platform:junit-platform-runner:1.0.0'
testImplementation 'org.junit.vintage:junit-vintage-engine:4.12.3'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.0'
有没有解决方案?
答案 0 :(得分:1)
我在VSCode中遇到了类似的情况,并认为我会分享我的结果。
我在pom.xml
中使用了错误的测试依赖关系混搭,这是通过做mvn dependency:tree
看到的。删除特定的junit-jupiter
依赖项并仅使用org.junit.jupiter:junit-jupiter
可使一切再次正常运行(VSCode中的测试执行和命令行中的mvn test
)。
我现在在pom.xml
中唯一拥有的木星依赖性是:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
答案 1 :(得分:1)
为了能够运行1.0.0
测试,可能仍需要将1.4.x
版本从junit5
升级到<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<version>1.4.2</version>
<scope>test</scope>
</dependency>
:
/tmp/cc5YTcBb.o:(.rodata._ZTV3CL1[_ZTV3CL1]+0x18): undefined reference to `CL1::fnc2()
我在 eclipse 中遇到了一个非常相似的问题,并找到了解决方法here
希望这会有所帮助!
答案 2 :(得分:0)
TL; DR 根据pom.xml
IDEA_INSTALLATION_HOME/plugins/junit/lib
中的依赖项降级
长版:
假设您使用的是Intellij IDEA的版本早于2017.3;那么您可以将这些选择作为对另一个SO问题的正式回答: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000791190-Intellij-does-not-run-Junit5-tests
将其粘贴到此处以使其更加可见:
IDE对旧的junit 5启动器jar具有编译依赖性,并且与当前发行版不兼容。因此,您可以选择更新IDE,使其与您使用的junit版本兼容或降级junit版本(检查IDEA_INSTALLATION_HOME / plugins / junit / lib中捆绑的版本)。 2017.1仅对junit 5提供了实验支持,因为当时junit 5尚未发布。抱歉给您带来不便。
因此,转到您的IDEA_INSTALLATION_HOME/plugins/junit/lib
文件夹并检查其中找到的jar
文件的名称中的版本。
应该是这样的:
user@comp:IDEA_INSTALLATION_HOME/plugins/junit/lib]$ ls
idea-junit.jar junit-platform-runner-1.0.0-M4.jar
junit5-rt.jar junit-platform-suite-api-1.0.0-M4.jar
junit-jupiter-api-5.0.0-M4.jar junit-rt.jar
junit-jupiter-engine-5.0.0-M4.jar junit-vintage-engine-4.12.0-M4.jar
junit-platform-commons-1.0.0-M4.jar opentest4j-1.0.0-M2.jar
junit-platform-engine-1.0.0-M4.jar resources_en.jar
junit-platform-launcher-1.0.0-M4.jar
现在在模块的junit-
pom.xml
设置中使用properties
文件名的版本后缀:
<project>
...
<properties>
<junit.jupiter.version>5.0.0-M4</junit.jupiter.version>
<junit.platform.version>1.0.0-M4</junit.platform.version>
<junit.vintage.version>4.12.0-M4</junit.vintage.version>
...
</properties>
...
</project>
我可以确认,更改为旧版本后,我可以运行使用org.junit.jupiter
软件包的Test类。在此之前,在尝试运行测试时,我经常遇到NoSuchMethodError
。