如何配置 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 允许使用两个预期参数(TestDescriptorTestResult)调用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 以输出执行的测试总数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gradle 启动测试中关闭关闭挂钩的输出?

Android Gradle 插件TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )

如何通过 gradle 测试任务执行测试方法?

如何解决此Gradle,建立我的问题?

如何在Gradle中使用JUnit 5?

在 Gradle 中,如何在每次执行 JUnit 测试类之前设置唯一的系统属性?