7

我正在尝试运行以下示例单元测试用例

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'

有什么解决办法吗?

4

3 回答 3

5

TL;DRpom.xml根据最初随 IDEA 提供的版本降级您的依赖项IDEA_INSTALLATION_HOME/plugins/junit/lib


更长的版本:

假设您使用的是早于 2017.3 的 Intellij IDEA 版本;那么您可以将这些选择作为对另一个 SO 问题的官方答案给出: https ://intellij-support.jetbrains.com/hc/en-us/community/posts/115000791190-Intellij-does-not-run-Junit5 -测试

将其粘贴到此处以使其更明显:

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包的测试类。在此之前,我一直NoSuchMethodError在尝试运行测试。

于 2018-06-19T17:10:07.667 回答
3

为了能够运行您的测试,可能仍需要从to升级junit-platform-launcher版本:1.0.01.4.xjunit5

<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.4.2</version>
    <scope>test</scope>
</dependency>

我在eclipse中遇到了一个非常相似的问题,并在这里找到了解决方案

希望这可以帮助 !

于 2020-06-18T20:03:14.360 回答
1

我在 VSCode 中遇到了类似的事情,并认为我会分享我的结果。

我在我pom.xmlmvn 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>

来源:https ://github.com/junit-team/junit5/issues/1773

于 2020-02-18T20:13:35.203 回答