无法从intellij想法运行junit-5测试用例

时间:2018-02-15 18:08:41

标签: java unit-testing intellij-idea junit junit5

Junit-5测试用例成功从命令行运行。我正在使用Maven,当我使用mvn clean install运行时,测试用例运行成功,但是当使用IntelliJ运行单个测试用例时,它会因以下错误而失败。

Feb 15, 2018 11:33:41 PM org.junit.jupiter.engine.discovery.JavaElementsResolver resolveMethod
WARNING: Method 'public static java.util.Collection com.softiventure.dtos.junit.parametrized.NestedParametrizedTest$sumTest.parameters()' could not be resolved.
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:59)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
    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.AppMain.main(AppMain.java:147)

我的示例测试类是:

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.junit.jupiter.api.Assertions.assertNotNull;

@DisplayName("Pass paramters ")
public class ParametrizedJunit5Test {

    @DisplayName("Should pass a non-null message to our test method")
    @ParameterizedTest
    @ValueSource(strings = {"Hello", "World"})
    void shouldPassNonNullMessageAsMethodParameter(String message) {
        assertNotNull(message);
    }
}

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

JUnit5和IntelliJ之间存在一些兼容性问题。

根据the JUnit docs ...

  

建议使用IDEA 2017.3或更新版本,因为这些较新版本的IDEA将根据项目中使用的API版本自动下载以下JAR:junit-platform-launcher,junit-jupiter-engine和junit-vintage - 发动机。

IntelliJ团队的这个blog post也是相关的。该帖子中的comment来自遇到与您相同的错误的用户,该用户的回复是:

  

我将想法更新到2017.2.6,效果很好。

因此,更新到IntelliJ 2017.3或更新版本,此问题应该消失。

答案 1 :(得分:3)

从官方评论中,您可能需要升级IDE版本

  

IDE对旧的junit 5启动程序jar具有编译依赖性,并且与当前发布的版本不兼容。因此,您可以选择更新IDE,使其与您使用的junit版本兼容,或者降级junit版本(检查IDEA_INSTALLATION_HOME / plugins / junit / lib中捆绑的版本)。 2017.1只有junit 5的实验支持,因为当时尚未发布junit 5。很抱歉给您带来不便。

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000791190-Intellij-does-not-run-Junit5-tests

答案 2 :(得分:1)

我有同样的问题。我的IDEA版本是deletePage(index) { let page = this.pages[index]; swal({ title: "Are you sure ?", text: "You will not be able to recover this page !", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "Yes, delete it !", cancelButtonText: "No, cancel !", closeOnConfirm: false, closeOnCancel: false }).then((confirmed) => { if (confirmed) { axios.delete(`/api/pagedelete/${page.id}`).then(response => { this.pages.splice(index, 1); }); } else { swal("Cancelled", "Your page has not been deleted !", "error"); } }); } ,当我运行Junit5测试用例时,发生了打击错误。

  

线程“ main”中的异常java.lang.NoSuchMethodError:org.junit.platform.launcher.Launcher.execute(Lorg / junit / platform / launcher / LauncherDiscoveryRequest;)V

并且我将IDEA更新为2017.1 ver.,该问题已解决