Gradle测试:仅使用特定测试显示标准流

时间:2015-05-17 00:01:35

标签: java unit-testing logging gradle

在使用Gradle进行测试时,当我使用--tests选项运行特定的测试子集时,我想在控制台上显示标准流

让我详细说明一下。在build.gradle我有

test {
    testLogging {
        //showStandardStreams = true
    }
}

通常,当我运行整个测试套件时,我不喜欢从测试中获得控制台输出。但是当我正在进行特定的测试时,拥有控制台输出是非常有用的,所以在使用gradle test --tests *name执行测试之前,我继续取消注释该行。

我想知道是否有自动化方法。

编辑:让我澄清一下。我希望在运行gradle test --tests *name时有控制台输出,但在运行gradle test时则不行。

2 个答案:

答案 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)
        }
    }
}

请参阅TestDescriptorTest

答案 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)
    }
}