在成功运行 JUnit 4 测试后,我正在尝试将 JUnit 5 与 Gradle 一起使用。
预期结果: JUnit 4 测试在输出中给出了很好的“通过”,并在build/reports/tests
.
实际结果:下面的 JUnit 5 测试除了 之外没有输出任何东西(...) build succesful
,而我知道测试实际上并没有运行,因为没有测试日志输出通过/跳过/失败,并且fail
在测试中放入 a 可以保持构建成功。
在很多我认为主要是不相关的输出中运行gradle test --info
收益率。Skipping task ':testClasses' as it has no actions.
令人惊讶的是,它还对 xml 中的 xml 表示Executing task ':test'
和Generating HTML test report... Finished generating test html results
类似build/test-results/test
,虽然没有生成 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");
}
}
我的文件夹结构是,使用 package 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 现在想要源代码和测试在他们自己的包中。
我试过的
显然这不是关于这个话题的第一个问题,我发现的所有相关问题都是
在 IntelliJ 中运行 jUnit 5 测试的 Gradle 项目
但是正如您所看到的,这是针对旧版本的 IntelliJ 的,根据其中一个答案,我已经在使用 IJ 2016.3.3 及更高版本的语法,在一个 JUnit 依赖行中,所以应该没问题。
使用 gradle 在 intellij 中从 JUnit 4 升级到 JUnit 5
链接回上述问题,并链接到这个Jetbrains 博客,它使用与上述问题相同的行。还链接到:
将 JUnit 5 测试结果与 Intellij 测试报告集成 在问题中,这也显示为依赖项
testRuntime("org.junit.vintage:junit-vintage-engine:5.0.0-M1")
当我在 IntelliJ 中运行 TestCase 时,为什么将 JUnit Jupiter 和 JUnit Vintage 分开? 好吧,当我运行它时,输出显示它找不到这个版本,但根据Maven 存储库,这个版本适用于 JUnit 5:
testRuntime("org.junit.vintage:junit-vintage-engine:4.12.0-M4")
那里的答案指出,您可以只在 IntelliJ 中运行测试,因为更高版本支持 JUnit 5。我知道,当我在 IntelliJ 中运行时,测试运行良好。但我想使用 Gradle(和需要依赖管理的 Travis)。
如何在 junit 5 gradle 测试报告中捕获 stdout/stderr?
我尝试使用
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但这个问题应该包含所有必要的信息。