Ваш вопрос состоит из двух частей: 1) сделать пользовательское задание выполненным всегда после выполнения test
задачи, 2) сделать «результат» теста доступным в этом пользовательском задании.
1) Сначалачасть очень проста, вам просто нужно использовать выделенный метод Task.finalizedBy
, чтобы создать «окончательную» зависимость между задачей test
и вашей пользовательской задачей.(см. Задачи финализатора )
2) Вторая часть немного сложна, поскольку, насколько я знаю, у Gradle нет простого способа получить «результат» (УСПЕХ)или НЕДОСТАТОК) задачи test
.Но вы могли бы использовать API, предоставляемый Test Task , чтобы сохранить количество ошибочных тестов в переменной и проверить этот счетчик в своей пользовательской задаче: вот рабочий пример:
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
РЕДАКТИРОВАТЬ : на основе важного замечания в комментарии @ lance-java: для поддержки актуальной проверки вы можете настроить свою пользовательскую задачу так, чтобы она была "пропущена", еслиtest
задание не выполнено.Простой способ - использовать функцию «Задача upToDateWhen
» (см. здесь ):
task('afterTest') {
// consider this task "UP TO DATE" if `test` task did not execute
outputs.upToDateWhen {
!test.didWork
}
doLast {
//...
}
}