怎样从测试 STDERR/STDOUT 获得输出到控制台?

我运行了一些 java 测试,记录了 Stderr/Stdout 的输出

gradle test --info

但在这种情况下,第三方库的大部分不需要的输出也存在。

文档 建议使用 logging.caputureStandardError / logging.caputureStandardError (loglevel),但似乎没有任何效果。

tasks.withType(Test) {
logging.captureStandardOutput LogLevel.QUIET
logging.captureStandardError LogLevel.QUIET
}

然后,如果运行 gradle test,而不是 STDERR/STDOUT 在控制台中输出。

如何在控制台中只获得测试类的输出?

40380 次浏览

将这些行添加到 build.gradle:

apply plugin: 'java'


test {
dependsOn cleanTest
testLogging.showStandardStreams = true
}

注意: dependsOn cleanTest是不必要的,但是 如没有使用,您需要在 test任务之前运行 cleanTestclean任务。


编辑:

更好的办法是:

apply plugin: 'java'


test {
testLogging {
outputs.upToDateWhen {false}
showStandardStreams = true
}
}

注意: outputs.upToDateWhen {false}是不必要的,但是 如没有使用,您需要在 test任务之前运行 cleanTestclean任务。

有关更多信息和选项,请参见 文件

对于那些使用 Kotlin/Kotlin DSL For Gradle 的用户,你需要在你的 build.gradle.kts文件中放入以下内容:

tasks.withType<Test> {
this.testLogging {
this.showStandardStreams = true
}
}

另外,正如在另一个答案中提到的,每次打印输出时都需要运行 gradle clean test

扩展@Talha Malik 的上述解决方案(以及 另一个职位中的解决方案) ,在处理多模块 android 应用程序时可以使用以下内容(root build.gradle)

// Call from root build.gradle
setupTestLogging()


fun Project.setupTestLogging() {
for (sub in subprojects) {
sub.tasks.withType<Test> {
testLogging {
exceptionFormat = TestExceptionFormat.FULL
}
}
}
}

(请注意,虽然单独的 exceptionFormat应该足以得到想要的结果,上面提到的 events("standardOut" ...)可以用同样的方式指定)

testLogging的答案是正确的。对我来说,因为我已经有了一个 tasks.test部分,我认为这将更容易把它放在那里。

tasks.test {
useJUnitPlatform()
this.testLogging {
this.showStandardStreams = true
}
}