带有 IntelliJ 和 Gradle 的 Junit5

新手上路,请多包涵

尝试使用 --- 将我的项目迁移到 java8 + Junit5 IntelliJ 2017.2

我添加了 junit-jupiter-api 版本 5.0.0-M6

junit-platform-launcher 版本 1.0.0-M6

项目结构是默认的maven约定 src/test/java

找到了几篇关于此的文章,但没有一篇能解决我的问题。

它在控制台中运行良好,我认为这与 IntelliJ 默认的 JUnit Runner 有关,或者我缺少一些依赖项?


当我运行一个测试类时,一切正常,但是当我选择目录和 Run all 'Tests' in Java 就像我以前做的那样,我遇到了一些错误。

 WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.TestDescriptor.pruneTree()V

Aug 02, 2017 2:44:56 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;

注意:我还没有迁移任何测试,都是 Junit 4 语法。

原文由 LazerBanana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 563
2 个回答

添加特定的依赖项可以解决问题。

注意:更新 2017.2.0 以上的 INTELLIJ,因为 JUNIT 启动器存在错误

OXYGEN 如果你使用 eclipse。


下面的依赖项启用 Junit5 参数化测试,可以用来代替 DataProvider

 "org.junit.jupiter:junit-jupiter-params:5.0.0"
//for JUnit5 parametrized tests.


Junit5 API

 "org.junit.jupiter:junit-jupiter-api:5.0.0"
//JUnit5 API


如果您想在不更改语法和导入的情况下运行遗留 JUnit4 测试,则需要。

 "org.junit.vintage:junit-vintage-engine:4:12.0"
//for legacy JUnit4 tests

编辑:07/2018 将 vintage runner 的版本与 jupiter 版本相匹配


如果您想使用新语法和导入运行 JUnit5 测试,则需要。

 "org.junit.jupiter:junit-jupiter-engine:5.0.0"
//for JUnit5 tests

java.lang.NoSuchMethodError: org.junit.platform.engine.EngineDiscoveryRequest.getDiscoveryFiltersByType(Ljava/lang/Class;)Ljava/util/List;


启动器

 "org.junit.platform:junit-platform-launcher:1.0.0
//to handle default launcher

线程“main”中的异常 java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;


附加信息如何安装 JUnit5


自 Gradle 4.6 版本以来,不再需要插件 Gradle 原生支持 Junit5 只需执行以下操作: 并且 vintage runner 的版本现在与 JUnit 5 版本相同。

 dependencies {

    testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion"
    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"

    testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junitVersion"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
}

test {
    useJUnitPlatform {
        includeEngines 'junit-jupiter', 'junit-vintage'
    }
}

原文由 LazerBanana 发布,翻译遵循 CC BY-SA 4.0 许可协议

我必须将 JUnit 的版本从 5.4.0 更改为 5.3.2,它就像一个魅力。

原文由 André Machado 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题