Gradle:如何将测试STDERR/STDOUT的输出导入控制台?

inkz8wg9  于 2022-12-04  发布在  其他
关注(0)|答案(4)|浏览(159)

(Gradle 3.2.1)我运行了一些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。
我怎样才能只从控制台中的测试类中得到输出呢?

mrwjdhj3

mrwjdhj31#

将这些行添加到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任务。
有关详细信息和选项,请参阅文档。

g6baxovj

g6baxovj2#

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

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

另外,正如在另一个答案中提到的,您将需要运行gradle clean test,以便每次打印输出。

hsvhsicv

hsvhsicv3#

扩展@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
            }
        }
    }
}

(note尽管单独的exceptionFormat应该足以获得所需的结果,但是可以以相同的方式指定上述events("standardOut" ...)

c8ib6hqw

c8ib6hqw4#

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

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

相关问题