Это недавно была тема в блоге Gradle. Прекратите повторный запуск тестов . Автор показывает пример использования outputs.upToDateWhen { false }
и объясняет , почему это не так:
На самом деле это не приводит к повторному запуску
Вероятно, автор этого фрагмента хотел сказать: «Всегда повторяйте мои тесты». Но это не то, что делает этот фрагмент. Он только пометит задачу как устаревшую, заставив Gradle воссоздать вывод. Но вот в чем дело: если кеш сборки включен, Gradle не нужно запускать задачу для воссоздания вывода. Он найдет запись в кеше и распакует результат в выходной каталог теста.
То же верно и для этого фрагмента:
test.dependsOn cleanTest
Gradle распакует результаты теста из кеша сборки после очистки вывода, поэтому ничего не будет запускаться повторно. Короче говоря, эти фрагменты создают очень дорогостоящую бездействие.
Если вы сейчас думаете: «Хорошо, я тоже отключу кеш», позвольте мне сказать вам, почему вам не следует этого делать.
Затем автор объясняет, почему повторный запуск некоторых тестов - пустая трата времени:
Подавляющее большинство ваших тестов должны быть детерминированными, т. Е. При одинаковых входных данных они должны давать одинаковый результат.
В тех немногих случаях, когда вы действительно хотите повторно запустить тесты, код которых не изменился, вы должны смоделировать их как входные. Вот оба примера из сообщения в блоге, в которых показано добавление ввода, чтобы задача использовала его во время проверки актуальности.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
Я рекомендую прочитать весь пост в блоге.