在使用Gradle进行测试时,当我使用--tests
选项运行特定的测试子集时,我想在控制台上显示标准流 。
让我详细说明一下。在build.gradle
我有
test {
testLogging {
//showStandardStreams = true
}
}
通常,当我运行整个测试套件时,我不喜欢从测试中获得控制台输出。但是当我正在进行特定的测试时,拥有控制台输出是非常有用的,所以在使用gradle test --tests *name
执行测试之前,我继续取消注释该行。
我想知道是否有自动化方法。
编辑:让我澄清一下。我希望在运行gradle test --tests *name
时有控制台输出,但在运行gradle test
时则不行。
答案 0 :(得分:3)
要在所有测试的某些运行中获取控制台输出,您可以在命令行上提供其他参数(-Poutput):
gradle test --tests *name -Poutput
test {
onOutput { descriptor, event ->
if (project.hasProperty('output')) {
logger.lifecycle(event.message)
}
}
}
仅在特定测试中获取控制台输出:
test {
onOutput { descriptor, event ->
if (descriptor.name=='YOUR_TEST_METHOD_NAME' &&
descriptor.className=='YOUR_PACKAGE_QUALIFIED_CLASS_NAME') {
logger.lifecycle(event.message)
}
}
}
答案 1 :(得分:1)
作为参考,我正在使用另一种方法,通过阅读命令行标志--info
test {
if (project.gradle.startParameter.logLevel == LogLevel.INFO) {
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
}
因此,当运行gradle test --info
时,我会看到更多的gradle详细信息,包括测试输出。通过这种设置,我可以看到其他gradle信息,例如依赖版本,这可能很有用。
但是我认为上面的答案确实可以更好地控制输出,例如:
onOutput { descriptor, event ->
if (project.hasProperty('output')) {
def withoutLastLineFeed = event.message.substring(0, event.message.length() - 1)
logger.lifecycle("{} ===> {}",
event.destination,
withoutLastLineFeed)
}
}