Junit5 与 IntelliJ 和 Gradle

2022-09-01 03:44:12

尝试使用将我的项目迁移到 java8 + Junit5IntelliJ 2017.2

我已添加版本junit-jupiter-api5.0.0-M6

和版本junit-platform-launcher1.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语法。


答案 1

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

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

氧气,如果你使用日食。


下面的依赖关系启用了 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将老式跑步者的版本与木星版本相匹配


如果要使用新语法和导入运行 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,只需执行以下操作:老式跑步者的版本现在与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'
    }
}

答案 2

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


推荐