Este fue recientemente el tema en la publicación del blog de Gradle. Deje de volver a ejecutar sus pruebas . El autor muestra un ejemplo usando outputs.upToDateWhen { false }
y explica por qué está mal:
Esto en realidad no fuerza repeticiones
Lo que el autor de este fragmento probablemente quiso decir es "Ejecutar siempre mis pruebas". Sin embargo, eso no es lo que hace este fragmento. Solo marcará la tarea desactualizada, lo que obligará a Gradle a recrear la salida. Pero aquí está la cosa, si la caché de compilación está habilitada, Gradle no necesita ejecutar la tarea para recrear la salida. Encontrará una entrada en el caché y descomprimirá el resultado en el directorio de salida de la prueba.
Lo mismo es cierto para este fragmento:
test.dependsOn cleanTest
Gradle desempaquetará los resultados de la prueba del caché de compilación después de que se haya limpiado la salida, por lo que no se volverá a ejecutar nada. En resumen, estos fragmentos están creando un no-op muy costoso.
Si ahora está pensando "Está bien, también desactivaré el caché", déjenme decirles por qué no deberían hacerlo.
Luego, el autor continúa explicando por qué volver a ejecutar algunas pruebas es una pérdida de tiempo:
La gran mayoría de sus pruebas deberían ser deterministas, es decir, dadas las mismas entradas, deberían producir el mismo resultado.
En los pocos casos en los que desea volver a ejecutar pruebas en las que el código no ha cambiado, debe modelarlas como entrada. Aquí hay dos ejemplos de la publicación del blog que muestran la adición de una entrada para que la tarea la use durante sus comprobaciones actualizadas.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
Recomiendo leer la publicación completa del blog.