预期结果:JUnit 4测试在输出中显示了一个漂亮的“通过”并生成了一个位于build/reports/tests目录下的HTML报告。
实际结果:下面的JUnit 5测试除了显示“(…) build successful”之外,没有输出任何内容。我知道测试实际上没有运行,因为没有测试日志输出通过/跳过/失败,并且在测试中放置一个“fail”也会使构建成功。
运行“gradle test --info”会显示“Skipping task ':testClasses' as it has no actions.”等很多我认为大部分是无关紧要的输出。令人惊讶的是,它还显示“Executing task ':test'”和“Generating HTML test report... Finished generating test html results”等类似的内容,以及在build/test-results/test目录下生成的xml文件,但实际上并没有生成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要求源代码和测试代码放在各自的包中。
我尝试过的方法是:
显然,这不是关于这个主题的第一个问题,我找到的所有相关问题都是
在IntelliJ中运行Gradle项目的jUnit 5测试
但是正如你所看到的,这是针对旧版本的IntelliJ,而我已经根据一个答案中的语法使用了IJ 2016.3.3及更高版本,所以应该没问题。
在IntelliJ中使用Gradle从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,但这个问题应该包含所有必要的信息。
org.junit
(Junit4 @Test)。 - yname