test在Gradle build中执行任务后,我希望始终执行应该可以访问测试结果的其他任务。就像是:
task('afterTest') {
doLast {
if (testSuccessful) {
//
} else {
//
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的问题有两个部分:1)使任务始终在test执行任务后执行,2)使测试“结果”在此任务中可用。
1)第一部分非常简单,您只需要使用专用Task.finalizedBy方法在test任务和自定义任务之间创建“ finalized by”依赖项即可。(请参阅终结器任务)
2)第二部分有些棘手,因为据我所知,Gradle没有提供简单的方法来获得任务的“结果”(成功或失败)test。但是您可以使用测试任务公开的API将错误测试的次数存储到变量中,并在自定义任务中测试此计数器:这是一个工作示例:
ext{
// counter of test cases in error
nbTestOnError = 0
}
test {
// use "afterTest" hook to increment nbTestOnError counter
afterTest { desc , result ->
if (result.getResultType().equals(TestResult.ResultType.FAILURE)){
nbTestOnError++
}
}
}
task('afterTest') {
doLast {
// implement your logic depending on counter value
if (nbTestOnError > 0) {
// do something if test failed
} else{
// do something when all tests passed
}
}
}
// create "finalized by" dependency
test.finalizedBy afterTest
Run Code Online (Sandbox Code Playgroud)
编辑:基于@ lance-java的注释中的重要说明:为了支持 最新检查,可以将自定义任务配置为“跳过”(如果test未执行任务)。一种简单的方法是使用Task upToDateWhen功能(请参阅此处):
task('afterTest') {
// consider this task "UP TO DATE" if `test` task did not execute
outputs.upToDateWhen {
!test.didWork
}
doLast {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
985 次 |
| 最近记录: |