Tengo mi guión de calificación configurado. Cuando ejecuto la compilación de Gradle, todo funciona y ejecuta las pruebas de jUnit.
Después de eso, cuando ejecuto la prueba de Gradle, obtengo lo siguiente:
C:\Users\..\..\Project>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
Cuando realizo gradle clean
, la construcción de Gradle funciona, por supuesto ... Quiero poder restablecer solo las pruebas, no construir todo el proyecto: ¿cómo debo hacer esto?
java
gradle
build.gradle
USer22999299
fuente
fuente
Respuestas:
Una opción sería usar la
--rerun-tasks
bandera en la línea de comando . Esto volvería a ejecutar toda la tarea de prueba y todas las tareas de las que depende.Si solo está interesado en volver a ejecutar las pruebas, otra opción sería hacer que Gradle limpie los resultados de las pruebas antes de ejecutarlas. Esto se puede hacer usando la
cleanTest
tarea.Algunos antecedentes: el complemento de Java define tareas limpias para cada una de las otras tareas. De acuerdo con la documentación :
Por lo tanto, todo lo que necesita para volver a ejecutar sus pruebas es también ejecutar la
cleanTest
tarea, es decir:gradle cleanTest test
fuente
gradle cleanTest test
no vuelve a ejecutar las pruebas, limpia su salida, pero latest
tarea aún obtendrá los resultados de la prueba de la memoria caché; consulte github.com/gradle/gradle/issues/9153--no-build-cache
, entonces funcionará como se esperaba, por ejemplogradle cleanTest test --no-build-cache
.Otra opción sería agregar lo siguiente en su build.gradle:
fuente
funcTest
tarea que creé para ejecutar pruebas funcionales.upToDateWhen
puede usar de cualquier forma "basada en código", como propiedades del sistema, variables de entorno, propiedades del proyecto, etc.gradle test -Prerun-tests
. Código en build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Fuente: https://gradle.org/docs/current/userguide/gradle_command_line.html
fuente
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:Luego, el autor continúa explicando por qué volver a ejecutar algunas pruebas es una pérdida de tiempo:
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.
Recomiendo leer la publicación completa del blog.
fuente
Aquí hay una solución que utiliza el archivo "build.gradle", en caso de que no desee modificar su línea de comando:
Y aquí está la salida. Observe 2 cambios de su salida anterior:
1) Aparece una nueva tarea 'cleanTest' en la salida.
2) 'prueba' siempre se limpia (es decir, nunca 'ACTUALIZADO') por lo que se ejecuta cada vez:
fuente
cleanTest
antestest
no volverá a ejecutar las pruebas, limpia su salida, pero la tarea de prueba aún obtendrá los resultados de la prueba de la memoria caché; consulte github.com/gradle/gradle/issues/9153--rerun-tasks
funciona, pero es ineficiente ya que vuelve a ejecutar todas las tareas.cleanTest
por sí solo puede no ser suficiente debido a la caché de compilación.Entonces, la mejor manera de lograr esto es:
fuente
Además, tener que agregar
--rerun-tasks
es realmente redundante. Nunca sucede. Crea un--no-rerun-tasks
y establece el--rerun-tasks
valor predeterminado cuandocleanTask
fuente
TL; DR
fuente
Creo que esta es una pregunta válida dado que en Gradle es posible ejecutar este comando
test
, ¡y lo que sucede es que no sucede nada!Pero cuestionaría la necesidad de hacer esto, como dijo Jolta en su comentario: si ningún código ha cambiado, ¿por qué necesita volver a realizar la prueba? Si tiene dudas sobre la entrada de terceros, diría que debe tener esto en cuenta en el código de su aplicación. Si le preocupa que su código pueda ser "escamoso", es decir, capaz de pasar todas las pruebas la primera vez pero no una segunda (o la centésima vez), ¿no necesita pensar en por qué tiene estas dudas y abordarlas?
Personalmente, creo que este es un error de diseño (muy pequeño) en Gradle: si todo está completamente actualizado, en lugar de ir a "CONSTRUIR CON ÉXITO", debería decir "NO HAY CAMBIO DESDE LA ÚLTIMA CONSTRUCCIÓN EXITOSA: NADA HECHO".
fuente