Esse foi recentemente o tópico na postagem do blog de Gradle. Pare de executar novamente seus testes . O autor mostra um exemplo usando outputs.upToDateWhen { false }
e explica por que está errado:
Na verdade, isso não força as reprises
O que o autor deste trecho provavelmente queria dizer é "Sempre execute novamente meus testes". Mas não é isso que esse trecho faz. Ele marcará apenas a tarefa desatualizada, forçando Gradle a recriar a saída. Mas eis o seguinte: se o cache de compilação estiver ativado, Gradle não precisará executar a tarefa para recriar a saída. Ele encontrará uma entrada no cache e descompacta o resultado no diretório de saída do teste.
O mesmo vale para este trecho:
test.dependsOn cleanTest
Gradle descompactará os resultados do teste do cache de compilação após a limpeza da saída, para que nada seja executado novamente. Em resumo, esses trechos estão criando um no-op muito caro.
Se agora você está pensando em "Ok, eu vou desativar o cache também", deixe-me dizer por que você não deveria.
Em seguida, o autor continua explicando por que executar novamente alguns testes é uma perda de tempo:
A grande maioria dos seus testes deve ser determinística, ou seja, dadas as mesmas entradas, eles devem produzir o mesmo resultado.
Nos poucos casos em que você deseja executar novamente os testes nos quais o código não foi alterado, você deve modelá-los como uma entrada. Aqui estão os dois exemplos da postagem do blog que mostram a adição de uma entrada para que a tarefa a use durante suas verificações atualizadas.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
Eu recomendo a leitura de todo o post do blog.