完成涉及测试的 gradle 任务后,如何显示所有测试失败的列表

Chi*_*ing 6 testing gradle

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

模块 1:

测试模块1thing1 通过
测试模块1thing2 失败

结果
2 次测试 1 次通过 1 次失败

模块 2:
测试模块2thing1 通过
testmodule2thing2 失败

结果
2 次测试 1 次通过 1 次失败

模块 3:
testmodule3thing1 失败

结果
1 项测试 1 项通过 1 项失败

构建失败

========= 我已经拥有了这条线以上的所有内容

测试失败:
测试模块1thing1
测试模块2thing2
测试模块3thing1

========= 我想要最后一行和这一行之间的所有内容

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

小智 10

这也可以直接在测试任务本身中完成:

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}")
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ren*_*hke 6

您可以将 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 ""
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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