【发布时间】:2017-11-09 19:35:38
【问题描述】:
在成功运行 JUnit 4 测试后,我正在尝试将 JUnit 5 与 Gradle 一起使用。
预期结果: JUnit 4 测试在输出中给出了很好的“通过”,并在 build/reports/tests 中给出了 html 报告。
实际结果:下面的JUnit 5测试除了(...) build succesful之外没有输出任何东西,而我知道测试实际上并没有运行,因为没有测试日志输出通过/跳过/失败,并在测试中添加fail 以保持构建成功。
运行gradle test --info 会产生Skipping task ':testClasses' as it has no actions. ,其中很多我认为主要是不相关的输出。
令人惊讶的是,build/test-results/test 中的 xml 也显示了Executing task ':test' 和 Generating HTML test report... Finished generating test html results 和类似的内容,虽然没有生成 xml,但 html 显示没有运行测试,也没有错误,并且测试确实没有运行。
我也觉得很有趣的是,gradle test --debug 产生了
[TestEventLogger] Gradle Test Run :test STARTED
[org.gradle.api.internal.tasks.testing.junit.JUnitDetector] test-class-
scan : failed to scan parent class java/lang/Object, could not find the class file
[TestEventLogger]
[TestEventLogger] Gradle Test Run :test PASSED
而我唯一的测试包含
fail("test fails");
我觉得很奇怪!
我的构建文件是
apply plugin: 'java'
test {
dependsOn 'cleanTest' // run tests every time
}
sourceSets {
main {
java {
srcDirs 'src'
}
}
test {
java {
srcDirs 'test'
}
}
}
repositories {
mavenCentral()
}
dependencies {
// when using this, it worked with a junit 4 test
// testCompile 'junit:junit:4.10'
// this should be needed for junit 5 (using M4 is required since IJ 2017.1.2
testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0-M4")
}
test {
testLogging {
events "passed", "skipped", "failed"
}
}
我的测试是
package mypackage;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class HelloWorldTest {
@Test
public void testHelloWorld(){
assertEquals(2, 1+1, "message");
}
}
我的文件夹结构是,使用包mypackage,
java-template-project
--- src
--- mypackage
--- HelloWorld.java
--- test
--- mypackage
--- HelloWorldTest.java
在我使用的 IntelliJ 2017.1.3 中,模块结构如下所示
java-template-project
--- java-template-project_main
--- src/mypackage
--- HelloWorld(.java)
--- java-template-project_test
--- test/mypackage
--- HelloWorldTest(.java)
因为如今的 Gradle 想要将源代码和测试放在自己的包中。
我尝试了什么
显然这不是关于这个话题的第一个问题,我找到的所有相关问题都是
-
Gradle project running jUnit 5 tests in IntelliJ
但是正如您所看到的,这是针对旧版本的 IntelliJ 的,并且根据其中一个答案,我已经在使用 IJ 2016.3.3 及更高版本的语法,在一个 JUnit 依赖行中,所以应该没问题.
-
Upgrade from JUnit 4 to JUnit 5 in intellij with gradle
链接回上面的问题,并链接到这个Jetbrains blog,它使用与上面问题相同的行。还链接到:
-
Integrate JUnit 5 tests results with Intellij test report 在问题中,这也显示为依赖项
testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")在Why were JUnit Jupiter and JUnit Vintage separated When I Running TestCase in IntelliJ? 中有解释 好吧,当我运行它时,输出显示它找不到这个版本,但根据Maven Repository 这个是针对 JUnit 5 的:
testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")那里的答案指出,您可以在 IntelliJ 中运行测试,因为更高版本支持 JUnit 5。我知道,当我在 IntelliJ 中运行时,测试运行良好。但我想使用 Gradle(和需要依赖管理的 Travis)。
-
How to capture stdout/stderr in junit 5 gradle test report?
我尝试过使用
testCompile("org.junit.platform:junit-platform-gradle-plugin:1.0.0-M3") testCompile("org.junit.jupiter:junit-jupiter-engine:5.0.0-M3")但结果没有改变。
我的模板项目位于https://github.com/PHPirates/java-template-project,但这个问题应该包含所有必要的信息。
【问题讨论】:
-
遇到了同样的问题。发现应该从 'org.junit.jupiter.api' (Junit5 @Test) 导入 @Test 而不是
org.junit(Junit4 @Test)
标签: gradle junit build.gradle junit5