如何配置 gradle 以输出执行的测试总数?
Posted
技术标签:
【中文标题】如何配置 gradle 以输出执行的测试总数?【英文标题】:How to configure gradle to output total number of tests executed? 【发布时间】:2016-09-07 11:30:20 【问题描述】:在运行测试时,到目前为止运行的测试数量会暂时显示,但是在所有测试运行后如何将运行的测试总数打印到控制台? p>
配置testLogging
没有帮助。我可以让 every 测试的 gradle 输出结果,如下所示:
testLogging
events "passed", "skipped", "failed"
但我想要一个摘要“底线”,输出已运行的测试总数,即使它们都通过了。
【问题讨论】:
【参考方案1】:Kotlin DSL 根据@Hubbitus 接受的答案应用答案(适应起来比预期的要复杂一些):
tasks.withType<AbstractTestTask>
afterSuite(
KotlinClosure2( desc: TestDescriptor, result: TestResult ->
// Only execute on the outermost suite
if (desc.parent == null)
println(" **** Result: $result.resultType ****")
println(" > Tests: $result.testCount")
println(" > Passed: $result.successfulTestCount")
println(" > Failed: $result.failedTestCount")
println(" > Skipped: $result.skippedTestCount")
)
)
使用KotlinClosure2
允许使用两个预期参数(TestDescriptor
和TestResult
)调用afterSuite
Groovy 闭包,Unit
是闭包的返回类型(参考:calling groovy closure from Kotlin)。
【讨论】:
【参考方案2】:这是我基于@Hubbitus 的回答和this answer 的android 解决方案
subprojects
afterEvaluate project ->
if (project.plugins.findPlugin('android') ?: project.plugins.findPlugin('android-library'))
tasks.withType(Test)
testLogging
events "started", "passed", "skipped", "failed"
afterSuite desc, result ->
if (!desc.parent) // will match the outermost suite
println "Results: $result.resultType ($result.testCount tests, $result.successfulTestCount successes, $result.failedTestCount failures, $result.skippedTestCount skipped)"
在我的根 build.gradle 中
【讨论】:
【参考方案3】:您可以将afterSuite closure 与TestResult
参数一起使用。
F.e. (借用https://gist.github.com/orip/4951642):
test
testLogging
afterSuite desc, result ->
if (!desc.parent) // will match the outermost suite
println "Results: $result.resultType ($result.testCount tests, $result.successfulTestCount successes, $result.failedTestCount failures, $result.skippedTestCount skipped)"
【讨论】:
当我这样做时,我得到Could not find method test() for arguments...
。有什么想法可能导致这种情况吗?我把它放在应用级别的 build.gradle 文件中。
在 Android 上看起来有点不同:***.com/questions/31275976/…
@AdamMc331,检查你应用了Java插件【参考方案4】:
将 Gradle 2.12 与一个简单项目(带有 2 个测试套件)一起使用,此脚本:
apply plugin: 'java'
repositories
mavenCentral()
dependencies
testCompile 'junit:junit:4.12'
def numTests = 0
test
beforeTest descriptor ->
logger.lifecycle("Running test: " + descriptor)
numTests++
test <<
println "\nnumTests executed: $numTests"
给出这个输出(对我来说):
bash$ gradle clean test
:clean
[snip]
:test
Running test: Test test1(net.codetojoy.ActorTest)
Running test: Test test2(net.codetojoy.ActorTest)
Running test: Test test3(net.codetojoy.ActorTest)
Running test: Test test4(net.codetojoy.ActorTest)
Running test: Test test1(net.codetojoy.SniffTest)
Running test: Test test2(net.codetojoy.SniffTest)
Running test: Test test3(net.codetojoy.SniffTest)
Running test: Test test4(net.codetojoy.SniffTest)
Running test: Test test5(net.codetojoy.SniffTest)
Running test: Test test6(net.codetojoy.SniffTest)
numTests executed: 10
【讨论】:
它完成了工作,但我正在寻找一种配置/设置方法——应该有一种简单的输出方法似乎是合理的。以上是关于如何配置 gradle 以输出执行的测试总数?的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )