Gradle:如何从测试STDERR/STDOUT输出到控制台?

Ale*_*dov 31 testing stdout stderr gradle

(Gradle 3.2.1)我运行了一些java测试,它们在Stderr/Stdout中记录输出.如果我开始,我可以看到输出

gradle test --info
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,第三方图书馆的大量不需要的输出也是如此.

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

tasks.withType(Test) {
   logging.captureStandardOutput LogLevel.QUIET
   logging.captureStandardError LogLevel.QUIET
}
Run Code Online (Sandbox Code Playgroud)

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

如何从控制台中的测试类中获取输出?

Omi*_*mid 51

将这些行添加到build.gradle:

apply plugin: 'java'

test {
    dependsOn cleanTest
    testLogging.showStandardStreams = true
}
Run Code Online (Sandbox Code Playgroud)

编辑:

更好的方法:

apply plugin: 'java'

test {
    testLogging {
        outputs.upToDateWhen {false}
        showStandardStreams = true
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:dependsOn cleanTest没有必要,但如果不使用,只有在它们不是最新的情况下才会显示输出,在这种情况下,您需要在任务之前运行cleanTestclean执行test任务.

有关更多信息和选项,请参阅文档.

  • @Omid是否可以在命令行上执行此操作。我可能不想编辑我的`build.gradle`文件,并且暂时不想看标准流。我可以做类似`-Dtest.testLogging.showStandardStreams = true`的事情吗? (2认同)
  • @Kilokahn我认为基于[这个问题](/sf/ask/1500984971/),答案是不. (2认同)

小智 17

对于使用 Kotlin/Kotlin DSL for Gradle 的用户,您需要将以下内容放入您的build.gradle.kts文件中:

tasks.withType<Test> {
    this.testLogging {
        this.showStandardStreams = true
    }
}
Run Code Online (Sandbox Code Playgroud)

同样如另一个答案中所述,您gradle clean test每次都需要运行输出才能打印。

  • 可以将 `outputs.upToDateWhen {false}` 添加到上述响应中以避免运行 `gradle clean test`。只需“gradle test”就可以了 (2认同)