J'ai configuré mon script de note. Lorsque j'exécute la compilation Gradle, tout fonctionne et il exécute les tests jUnit.
Après cela, lorsque j'exécute le test Gradle, j'obtiens ce qui suit:
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
Quand j'exécute gradle clean
, alors Gradle build fonctionne, bien sûr ... Je veux pouvoir réinitialiser uniquement les tests, pas construire tout le projet: comment dois-je faire cela?
java
gradle
build.gradle
USer22999299
la source
la source
Réponses:
Une option serait d'utiliser l'
--rerun-tasks
indicateur dans la ligne de commande . Cela réexécuterait toute la tâche de test et toutes les tâches dont elle dépend.Si vous souhaitez uniquement réexécuter les tests, une autre option serait de faire en sorte que gradle nettoie les résultats des tests avant d'exécuter les tests. Cela peut être fait en utilisant la
cleanTest
tâche.Un peu de contexte - le plugin Java définit des tâches propres pour chacune des autres tâches. Selon la documentation :
Par conséquent, tout ce dont vous avez besoin pour réexécuter vos tests est d'exécuter également la
cleanTest
tâche, c'est-à-dire:gradle cleanTest test
la source
gradle cleanTest test
ne réexécute pas les tests, il nettoie leur sortie, mais latest
tâche obtiendra toujours les résultats des tests du cache - voir github.com/gradle/gradle/issues/9153--no-build-cache
, cela fonctionnera comme prévu, par exemplegradle cleanTest test --no-build-cache
.Une autre option serait d'ajouter ce qui suit dans votre build.gradle:
la source
funcTest
tâche que j'ai créée pour exécuter des tests fonctionnels.upToDateWhen
peut être utilisé de n'importe quelle manière "pilotée par le code", comme les propriétés système, les variables d'environnement, les propriétés du projet, etc.gradle test -Prerun-tests
. Code dans build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Source: https://gradle.org/docs/current/userguide/gradle_command_line.html
la source
C'était récemment le sujet du billet de blog de Gradle Arrêtez de réexécuter vos tests . L' auteur montre un exemple d'utilisation
outputs.upToDateWhen { false }
et explique pourquoi c'est faux:Ensuite, l'auteur explique pourquoi réexécuter certains tests est une perte de temps:
Dans les quelques cas où vous souhaitez réexécuter des tests où le code n'a pas changé, vous devez les modéliser comme une entrée. Voici deux exemples du billet de blog qui montrent l'ajout d'une entrée afin que la tâche l'utilise lors de ses vérifications à jour.
Je recommande de lire l'intégralité du billet de blog.
la source
Voici une solution utilisant le fichier "build.gradle", au cas où vous ne voudriez pas modifier votre ligne de commande:
Et voici la sortie. Notez 2 changements par rapport à votre sortie précédente:
1) Une nouvelle tâche «cleanTest» apparaît dans la sortie.
2) 'test' est toujours nettoyé (c'est-à-dire jamais 'UP-TO-DATE') donc il est exécuté à chaque fois:
la source
cleanTest
avanttest
ne réexécutera pas les tests, il nettoie leur sortie, mais la tâche de test obtiendra toujours les résultats des tests du cache - voir github.com/gradle/gradle/issues/9153--rerun-tasks
fonctionne, mais est inefficace car il réexécute toutes les tâches.cleanTest
à lui seul peut ne pas suffire en raison de la création du cache.donc, la meilleure façon d'y parvenir est:
la source
De plus, avoir à ajouter
--rerun-tasks
est vraiment redondant. Cela n'arrive jamais. Créez un--no-rerun-tasks
et définissez-le--rerun-tasks
par défaut lorsquecleanTask
la source
TL; DR
la source
Je pense que c'est une question valable étant donné qu'il est possible dans Gradle d'exécuter cette commande
test
, et ce qui se passe, c'est que rien ne se passe!Mais je remettrais en question la nécessité de faire cela, comme Jolta l'a dit dans son commentaire: si aucun code n'a changé, pourquoi avez-vous besoin de re-tester? Si vous avez des doutes sur les entrées tierces, je dirais que vous devez en tenir compte dans le code de votre application. Si vous craignez que votre code ne soit "floconneux", c'est-à-dire capable de passer tous les tests une première fois mais pas une seconde (ou une centième fois), n'avez-vous pas besoin de réfléchir aux raisons pour lesquelles vous avez ces doutes, et de les résoudre?
Personnellement, je pense que c'est un défaut de conception (très mineur) dans Gradle: si tout est complètement à jour, plutôt que de passer à "BUILD SUCCESSFUL", il devrait dire "NO CHANGE SINCE DERNIER SUCCESSFUL BUILD: RIEN FAIT".
la source