代码之家  ›  专栏  ›  技术社区  ›  Vinay Prajapati Fathi Alwosaibi

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

  •  5
  • Vinay Prajapati Fathi Alwosaibi  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  6
  •   glytching    6 年前

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

    根据 the JUnit docs ...

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

    blog post 来自IntelliJ团队的信息也是相关的。有一个 comment 在该帖子中,用户遇到了与您相同的错误,该用户的回答是:

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

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

        2
  •  3
  •   miskender    6 年前

    根据官方评论,您可能需要升级IDE版本

    IDE对旧的junit 5启动器jar具有编译依赖性,它与当前发布的版本不兼容。因此,您可以选择更新IDE,使其与您使用的junit版本兼容,或者降级junit版本(检查IDEA\u INSTALLATION\u 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

        3
  •  1
  •   bluetata    6 年前

    我也有同样的问题。我的想法是 2017.1 ver. ,当我运行Junit5测试用例时,发生了blow错误。

    线程“main”java中出现异常。lang.NoSuchMethodError:org。朱尼特。站台启动器。启动器。执行(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)五、

    我更新了想法 2017.3.5 ver. ,该问题已解决