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

我添加了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语法。

最佳答案

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

注意:在2017年2月2日之前更新INTELLIJ,因为JUNIT启动器存在错误

(如果使用eclipse,则为OXYGEN )。

通过以下依赖关系,可以启用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



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



有关如何安装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'
    }
}

10-02 06:25