Ich habe mein Notenskript eingerichtet. Wenn ich den Gradle-Build ausführe, funktioniert alles und es werden die jUnit-Tests ausgeführt.
Wenn ich danach den Gradle-Test durchführe, erhalte ich Folgendes:
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
Wenn ich gradle clean
spiele, funktioniert Gradle Build natürlich ... Ich möchte nur die Tests zurücksetzen können, nicht das gesamte Projekt: Wie soll ich das machen?
java
gradle
build.gradle
USer22999299
quelle
quelle
Antworten:
Eine Option wäre die Verwendung des
--rerun-tasks
Flags in der Befehlszeile . Dies würde alle Testaufgaben und alle Aufgaben, von denen es abhängt, erneut ausführen.Wenn Sie nur daran interessiert sind, die Tests erneut auszuführen, können Sie die Testergebnisse vor dem Ausführen der Tests schrittweise bereinigen. Dies kann mit der
cleanTest
Aufgabe erfolgen.Hintergrundinformationen - Das Java-Plugin definiert für jede der anderen Aufgaben eine saubere Aufgabe. Laut Dokumentation :
Um Ihre Tests erneut auszuführen, müssen Sie daher nur die
cleanTest
Aufgabe ausführen , dh:gradle cleanTest test
quelle
gradle cleanTest test
führt die Tests nicht erneut aus, bereinigt ihre Ausgabe, aber dietest
Aufgabe erhält weiterhin die Testergebnisse aus dem Cache - siehe github.com/gradle/gradle/issues/9153--no-build-cache
, funktioniert es wie erwartet, zgradle cleanTest test --no-build-cache
.Eine andere Möglichkeit wäre, Folgendes in Ihr build.gradle aufzunehmen:
quelle
funcTest
Aufgabe verwendet, die ich zum Ausführen von Funktionstests erstellt habe.upToDateWhen
kann auf jede "gradle test -Prerun-tests
. Code in build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Quelle: https://gradle.org/docs/current/userguide/gradle_command_line.html
quelle
Dies war kürzlich das Thema in Gradles Blog-Post. Hören Sie auf, Ihre Tests erneut auszuführen . Der Autor zeigt ein Beispiel mit
outputs.upToDateWhen { false }
und erklärt, warum es falsch ist:Anschließend erklärt der Autor, warum das Wiederholen einiger Tests Zeitverschwendung ist:
In den wenigen Fällen, in denen Sie Tests erneut ausführen möchten, bei denen sich der Code nicht geändert hat, sollten Sie sie als Eingabe modellieren. Hier sind beide Beispiele aus dem Blog-Beitrag, die das Hinzufügen einer Eingabe zeigen, damit die Aufgabe diese bei ihren aktuellen Überprüfungen verwendet.
Ich empfehle den gesamten Blog-Beitrag zu lesen.
quelle
Hier ist eine Lösung mit der Datei "build.gradle", falls Sie Ihre Befehlszeile nicht ändern möchten:
Und hier ist die Ausgabe. Beachten Sie 2 Änderungen gegenüber Ihrer vorherigen Ausgabe:
1) In der Ausgabe wird eine neue 'cleanTest'-Aufgabe angezeigt.
2) 'test' wird immer bereinigt (dh niemals 'UP-TO-DATE'), so dass es jedes Mal ausgeführt wird:
quelle
cleanTest
zuvortest
ausgeführt werden, werden die Tests nicht erneut ausgeführt, sondern die Ausgabe wird bereinigt. Die--rerun-tasks
funktioniert, ist aber ineffizient, da alle Aufgaben erneut ausgeführt werden.cleanTest
allein kann aufgrund des Build-Caches nicht ausreichen.Der beste Weg, dies zu erreichen, ist:
quelle
Außerdem ist das Hinzufügen
--rerun-tasks
wirklich überflüssig. Das passiert nie. Erstellen Sie eine--no-rerun-tasks
und machen Sie--rerun-tasks
Standard, wenncleanTask
quelle
TL; DR
quelle
Ich denke, dies ist eine berechtigte Frage, da es in Gradle möglich ist, diesen Befehl auszuführen
test
, und was passiert, ist, dass nichts passiert!Aber ich würde die Notwendigkeit in Frage stellen, dies jemals zu tun, wie Jolta in seinem Kommentar sagte: Wenn sich kein Code geändert hat, warum müssen Sie erneut testen? Wenn Sie Zweifel an Eingaben von Drittanbietern haben, würde ich sagen, dass Sie dies in Ihrem App-Code berücksichtigen müssen. Wenn Sie befürchten, dass Ihr Code "schuppig" sein könnte, dh alle Tests beim ersten Mal, aber nicht beim zweiten (oder 100.) Mal bestehen kann, müssen Sie nicht darüber nachdenken, warum Sie diese Zweifel haben, und sie ansprechen?
Persönlich denke ich, dass dies ein (sehr geringfügiger) Designfehler in Gradle ist: Wenn alles vollständig auf dem neuesten Stand ist, anstatt "ERFOLGREICH BAUEN" zu gehen, sollte "KEINE ÄNDERUNG SEIT LETZT ERFOLGREICHES BAUEN: NICHTS GEMACHT" lauten.
quelle