【发布时间】:2012-03-10 12:32:57
【问题描述】:
在测试时,Gradle 似乎将 stdout/stderr 重定向到 project_dir/build/reports/tests/index.html。有没有办法避免这种重定向,而是将内容打印到控制台?
附加信息:
- 这是一个 Scala 2.9.1 项目。
- 我正在使用slf4s 进行日志记录。
【问题讨论】:
在测试时,Gradle 似乎将 stdout/stderr 重定向到 project_dir/build/reports/tests/index.html。有没有办法避免这种重定向,而是将内容打印到控制台?
附加信息:
【问题讨论】:
对于 Android Gradle:https://stackoverflow.com/a/42425815/413127
对于 Android Gradle KTS (Kotlin):
// Test Logging
tasks.withType<Test> {
testLogging {
events("standardOut", "started", "passed", "skipped", "failed")
}
}
【讨论】:
如果您将 Kotlin DSL 与 build.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")
}
}
然后您可以根据需要调整设置。
【讨论】:
./gradlew --info clean build test
使用--stacktrace 选项运行以获取堆栈跟踪。使用--info 或--debug 选项运行以获得更多日志输出。使用--scan 运行以获得完整的见解。
【讨论】:
--info 和 --debug 会显示太多 Gradle 日志,大多数时候我们不需要它们
就我而言,我使用的是 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
【讨论】:
test {
testLogging.showStandardStreams = true
}
和
test {
testLogging {
showStandardStreams = true
}
}
也可以。
【讨论】:
如果您在 android gradle 文件中(如果 apply plugin: 'com.android.application' 位于 build.gradle 文件的顶部)
然后将其粘贴到 build.gradle 中
// Test Logging
tasks.withType(Test) {
testLogging {
events "standardOut", "started", "passed", "skipped", "failed"
}
}
将此粘贴到 build.gradle 中
// Test Logging
test {
testLogging {
showStandardStreams = true
}
}
【讨论】:
只是补充一下:
showStandardStreams = true
是shorthand 用于:
events = ["standard_out", "standard_error"]
在混合以下两个条目时,请务必牢记这一点:
test {
testLogging {
showStandardStreams = true
events = ["passed", "failed", "skipped"]
}
}
将导致无标准输出,而相反的顺序:
test {
testLogging {
events = ["passed", "failed", "skipped"]
showStandardStreams = true
}
}
会将标准输出条目添加到列表中,因此 标准输出将起作用。
详情请见the source。
【讨论】:
showStandardStreams 排在第二位时,仔细检查一下,标准流是否附加到事件列表中?看起来是这样,但只是仔细检查。
正如 @roby 回答的那样:
将以下代码添加到您的build.gradle
apply plugin : 'java'
test {
testLogging.showStandardStreams = true
}
重要!
您需要运行 gradle test 或使用添加的clean 命令构建。
./gradlew clean test
or
./gradlew clean build
希望有效。
【讨论】:
我也在使用(testLogging.exceptionFormat = 'full'):
test {
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
从堆栈跟踪中了解更多信息是件好事
【讨论】:
exceptionFormat 设置对我有用,showStandardStreams 无效!
apply plugin : 'java'
test {
testLogging.showStandardStreams = true
}
http://gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html
这需要当前的 gradle 版本。我假设 Scala 测试是在 Java 测试任务下运行的。
【讨论】:
$ gradle clean test 或在testLogging 块内使用outputs.upToDateWhen {false} (test { testLogging { outputs...)。详情见docs。