【问题标题】:How do I show a list of all the test failures after completion of a gradle task involving tests完成涉及测试的 gradle 任务后,如何显示所有测试失败的列表
【发布时间】:2017-10-10 14:12:04
【问题描述】:

在我的多模块项目上运行包含测试的 gradle 任务后,我想查看所有模块中每个测试失败的摘要,例如

模块 1: testmodule1thing1 已通过 测试模块 1 事物 2 失败 结果 2 次测试 1 次通过 1 次失败 模块二: testmodule2thing1 已通过 测试模块 2 事物 2 失败 结果 2 次测试 1 次通过 1 次失败 模块 3: 测试模块3thing1 失败 结果 1 次测试 1 次通过 1 次失败 构建失败 ========= 我已经拥有了这条线以上的一切 测试失败: 测试模块1thing1 测试模块2thing2 测试模块3thing1 ========= 我想要最后一行和这一行之间的所有内容

这可能吗?如果是这样,怎么做?如果无法提供完整的任务摘要,我可以接受每个模块的摘要

【问题讨论】:

    标签: testing gradle


    【解决方案1】:

    您可以将 testlistener 与 buildFinished 挂钩结合使用。一个非常简单的解决方案可能如下所示:

    allprojects {
        // add a collection to track failedTests
        ext.failedTests = []
    
        // add a testlistener to all tasks of type Test
        tasks.withType(Test) {
            afterTest { TestDescriptor descriptor, TestResult result ->
                if(result.resultType == org.gradle.api.tasks.testing.TestResult.ResultType.FAILURE){
                    failedTests << ["${descriptor.className}::${descriptor.name}"]
                }
            }
        }
    
        // print out tracked failed tests when the build has finished
        gradle.buildFinished {
            if(!failedTests.empty){
                println "Failed tests for ${project.name}:"
                failedTests.each { failedTest ->
                    println failedTest
                }
                println ""
            }
        }
    }
    

    另一个更好地了解失败测试的选项可能是使用 gradle 构建扫描 (https://plugins.gradle.org/plugin/com.gradle.build-scan)。

    【讨论】:

      【解决方案2】:

      这也可以直接在 test 任务本身内完成:

      tasks.withType(Test) {
          // a collection to track failedTests
          ext.failedTests = []
      
          afterTest { descriptor, result ->
              if (result.resultType == TestResult.ResultType.FAILURE) {
                  String failedTest = "${descriptor.className}::${descriptor.name}"
                  logger.debug("Adding " + failedTest + " to failedTests...")
                  failedTests << [failedTest]
              }
          }
      
          afterSuite { suite, result ->
              if (!suite.parent) { // will match the outermost suite
                  // logs each failed test
                  if (!failedTests.empty) {
                      logger.lifecycle("Failed tests:")
                      failedTests.each { failedTest ->
                          logger.lifecycle("${failedTest}")
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-21
        • 2016-02-09
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 2021-01-06
        • 2019-08-26
        相关资源
        最近更新 更多