gradle - 尽管其中一项任务失败,Gradle 将退出代码返回为 0
问题描述
假设我按以下方式运行 gradle 任务:
./gradlew cleanTest task1 task2 --info --rerun-task
如果 task1 失败并且 task2 通过,则此运行的退出代码仍然为 0。如果任何任务失败,我希望它返回非零。
这些是添加到我的 build.gradle 文件中的任务
task task1(type: Test) {
maxParallelForks = 1
ignoreFailures true
testLogging {
events 'started', 'passed', 'skipped', 'failed'
exceptionFormat "full"
showStandardStreams = true
afterSuite { desc, result ->
if (!desc.parent) { // will match the outermost suite
println "RESULT: ${result.resultType} \n" +
"TOTAL TESTS: ${result.testCount}, " +
"SUCCESS: ${result.successfulTestCount}, " +
"FAILED: ${result.failedTestCount}, " +
"SKIPPED: ${result.skippedTestCount}"
finalResult = "${result.resultType}"
failedTest = "${result.failedTestCount}"
}
}
}
include "org/company/proj/test/Task1/Task1Test.class"
}
task task2(type: Test) {
maxParallelForks = 1
ignoreFailures true
testLogging {
events 'started', 'passed', 'skipped', 'failed'
exceptionFormat "full"
showStandardStreams = true
afterSuite { desc, result ->
if (!desc.parent) { // will match the outermost suite
println "RESULT: ${result.resultType} \n" +
"TOTAL TESTS: ${result.testCount}, " +
"SUCCESS: ${result.successfulTestCount}, " +
"FAILED: ${result.failedTestCount}, " +
"SKIPPED: ${result.skippedTestCount}"
finalResult = "${result.resultType}"
failedTest = "${result.failedTestCount}"
}
}
}
include "org/company/proj/test/Task2/Task2Test.class"
}```
解决方案
从讨论中我了解到ignoreFailures
,failFast
测试任务不符合您的要求,对吧?我可以看到一个用例,您希望确保两个测试任务都实际执行,即使第一个任务测试失败,但同时您希望构建在测试用例失败时最终失败在任何测试任务中。
首先,您可能要考虑这一点。通常,目的是通过尽快失败和中止构建来节省服务器(或本地)上的执行时间。
但是,如果您真的想构建满足您的要求的东西,您已经提供了所有详细信息:您可以添加一个项目变量来存储测试结果并创建一个额外的任务来检查该属性,如果有则失败失败的测试。
ext {
failedTests = false
}
task test1(type: Test) {
ignoreFailures true
afterSuite { desc, result ->
if (result.failedTestCount > 0) {
failedTests = true
}
}
}
task test2(type: Test) {
ignoreFailures true
afterSuite { desc, result ->
if (result.failedTestCount > 0) {
failedTests = true
}
}
}
task verifyTestResults() {
//dependsOn("test1", "test2") // static naming of test tasks
dependsOn tasks.withType(Test) // dynamically depend on all test tasks
doLast {
if(failedTests) {
throw new GradleException("There were failing tests!")
}
}
}
现在,您只需要调用gradlew verifyTestResults
.
推荐阅读
- javascript - 如何将一些 HTML/文本添加到 Javascript 文本输出中?我似乎只能要么只做 JS 要么只做文本,不能两者兼而有之
- rest - 如何在使用 Spring Boot 和 Spring Data Jpa 时使用 Rest Service
- arrays - 如何在 REACT JS API 调用中迭代 JSON 嵌套数组?
- rest - Restful API 从资源中获取操作数据
- c - 如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗?
- javascript - 是否有将非结构化数据转换为 csv 的 npm 包?
- javascript - 单击按钮时如何从 HTML 调用导出的函数?
- r - 如何创建一行中每个数字比前一个数字小 10 倍的列?
- powershell - 用于检查变量的 Powershell 退出脚本
- macos - macOS 上二进制数据中不区分大小写的文本搜索