尝试使用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'
}
}