通过Gradle测试时记录


78

在测试时,Gradle似乎将stdout / stderr重定向到project_dir/build/reports/tests/index.html。有没有办法避免这种重定向,而是将内容打印到控制台上?

附加信息:

  • 这是一个Scala 2.9.1项目。
  • 我正在使用slf4s进行日志记录。

Answers:


96
apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html

这需要当前的gradle版本。我假设Scala测试是在Java测试任务下运行的。


糟糕的测试看起来好像不行,尽管如此,这还是为我产生了输出: pastebin.com/PX8e1EKv 编辑:将println修改为打印,因为我认为该事件捕获了换行符
roby

谢谢。我也会尝试的。我在源文件中也有一些日志语句。如何使它们打印到控制台?
missingfaktor 2012年

这取决于日志记录的实现。slf4s可能默认为NOP记录器,并丢弃您的日志语句。您在测试类路径上是否有记录器实现jar?如果存在slf4j-simple-1.6.4.jar,它将INFO和更高版本记录到STDERR。如果那还不够,我将添加一个logback jar并设置一个logback-test.xml以将日志追加到控制台。
roby 2012年

使用Spring / JUnit为我工作
Dmitry Minkovsky 2015年

它“不起作用”可能是因为测试任务被认为是最新的并且无法运行,因此您看不到任何输出。您可以在块()内执行$ gradle clean test或使用。有关详细信息,请参阅文档outputs.upToDateWhen {false}testLoggingtest { testLogging { outputs...
约翰尼·布洛尼

26

我也在使用(testLogging.exceptionFormat = 'full'):

test {
    testLogging.showStandardStreams = true
    testLogging.exceptionFormat = 'full'
}

可以从stacktrace中看到更多信息


1
exceptionFormat设置对我有用,showStandardStreams没有任何效果!
Shakeel

18

正如@roby回答的那样:

将以下代码添加到您的 build.gradle

apply plugin : 'java'

test {
    testLogging.showStandardStreams = true
}

重要!

您需要运行gradle测试或使用添加的clean命令进行构建。

./gradlew clean test

or

./gradlew clean build

希望能奏效。


3
您能解释为什么需要“清洁”吗?
Michael Kanis

2
@MichaelKanis,因为您已经更改了gradle配置。据我所知,gradle配置已缓存。
nmfzone

1
@nmfzone意味着您需要运行一次干净测试来更新缓存。但是在我的场景中,我每次都需要运行clean命令只是为了在控制台上显示测试结果。即使在随后的运行中没有更改gradle配置。
曾伟石

@WeishiZeng您确定测试只是因为它们的输入未更改而没有运行?如果您有Java源文件以外的其他测试输入,则应将它们注册为Task.inputs,以便gradle知道何时需要重新运行测试。
阿贾克斯

17

对于Android Gradle文件

如果您位于android gradle文件中(如果apply plugin: 'com.android.application'位于build.gradle文件的顶部)

然后将其粘贴到build.gradle

// Test Logging
tasks.withType(Test) {
    testLogging {
        events "standardOut", "started", "passed", "skipped", "failed"
    }
}

对于常规Gradle文件

将此粘贴到build.gradle

// Test Logging
test {
    testLogging {
        showStandardStreams = true
    }
}

10
test {
    testLogging.showStandardStreams = true
}

test {
    testLogging {
        showStandardStreams = true
    }
}

也可以。


9

只需添加:

showStandardStreams = true

是以下内容的简写

events = ["standard_out", "standard_error"]

在将两个条目混合如下时,请记住这一点很重要:

test {
    testLogging {
        showStandardStreams = true
        events = ["passed", "failed", "skipped"]
    }
}

不会产生stdout,而相反的顺序:

test {
    testLogging {
        events = ["passed", "failed", "skipped"]
        showStandardStreams = true
    }
}

会将stdout条目添加到列表中,因此stdout将起作用

有关详细信息,请参见


如果showStandardStreams排在第二位,只是为了仔细检查,标准流是否会附加到事件列表中?看起来像,但只是仔细检查。
George Pantazes

2

如果您使用的Kotlin DSLbuild.gradle.kts的语法有点不同。

确保依赖项中包含junit:

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.4.2")
    testImplementation("org.junit.jupiter:junit-jupiter-api")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

然后,您需要添加到测试任务中:

import org.gradle.api.tasks.testing.logging.TestExceptionFormat

tasks.test {
    useJUnitPlatform()
    testLogging {
        showStandardStreams = true
        exceptionFormat = TestExceptionFormat.FULL
        events("skipped", "failed")
    }
}

然后,您可以根据需要调整设置。


0

就我而言,我正在使用Java和Spring-boot-starter-test。

我有同样的问题,问题是我没有任何测试引擎。

因此,我将一个添加到build.gradle的依赖项中,它可以正常工作。

testCompile组:“ org.junit.jupiter”,名称:“ junit-jupiter-api”,版本:dependencyVersion.junit5 testCompile组:“ org.junit.jupiter”,名称:“ junit-jupiter-engine”,版本:dependencyVersion .junit5


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.