Mam skonfigurowany skrypt ocen. Kiedy wykonuję kompilację Gradle, wszystko działa i uruchamia testy jUnit.
Po tym, gdy uruchamiam test Gradle, otrzymuję następujące informacje:
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
Kiedy wykonuję gradle clean
, to oczywiście Gradle działa ... Chcę mieć możliwość resetowania tylko testów, a nie budowania całego projektu: jak mam to zrobić?
java
gradle
build.gradle
USer22999299
źródło
źródło
Odpowiedzi:
Jedną z opcji byłoby użycie
--rerun-tasks
flagi w wierszu poleceń . Spowoduje to ponowne uruchomienie wszystkich zadań testowych i wszystkich zadań, od których zależy.Jeśli jesteś zainteresowany tylko ponownym uruchomieniem testów, inną opcją byłoby wyczyszczenie wyników testów przez gradle przed wykonaniem testów. Można to zrobić za pomocą
cleanTest
zadania.Trochę tła - wtyczka Java definiuje czyste zadania dla każdego z pozostałych zadań. Zgodnie z dokumentacją :
W związku z tym, aby ponownie uruchomić testy, wystarczy uruchomić również
cleanTest
zadanie, czyli:gradle cleanTest test
źródło
gradle cleanTest test
nie uruchamia ponownie testów, czyści ich dane wyjściowe, aletest
zadanie nadal będzie pobierać wyniki testów z pamięci podręcznej - patrz github.com/gradle/gradle/issues/9153--no-build-cache
, to zadziała zgodnie z oczekiwaniami, npgradle cleanTest test --no-build-cache
.Inną opcją byłoby dodanie następującego polecenia w pliku build.gradle:
źródło
funcTest
zadania, które stworzyłem, aby uruchomić testy funkcjonalne.upToDateWhen
Może być stosowany w każdym „code-driven” sposób, takie jak właściwości systemowych, zmiennych środowiskowych, właściwości projektu, itpgradle test -Prerun-tests
. Kod w build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Źródło: https://gradle.org/docs/current/userguide/gradle_command_line.html
źródło
To był ostatnio temat na blogu Gradle'a Przestań ponownie uruchamiać swoje testy . Autor przedstawia przykład korzystania
outputs.upToDateWhen { false }
i wyjaśnia, dlaczego jest źle:Następnie autor wyjaśnia, dlaczego ponowne przeprowadzenie niektórych testów jest stratą czasu:
W kilku przypadkach, w których chcesz ponownie uruchomić testy, w których kod nie uległ zmianie, powinieneś zamodelować je jako dane wejściowe. Oto oba przykłady z wpisu na blogu, które pokazują dodawanie danych wejściowych, aby zadanie użyło ich podczas sprawdzania aktualności.
Polecam przeczytanie całego wpisu na blogu.
źródło
Oto rozwiązanie wykorzystujące plik „build.gradle”, na wypadek gdybyś nie chciał modyfikować wiersza poleceń:
A oto wynik. Zwróć uwagę na 2 zmiany w stosunku do poprzedniego wyniku:
1) Na wyjściu pojawi się nowe zadanie „cleanTest”.
2) „test” jest zawsze czyszczony (tj. Nigdy nie jest „AKTUALNY”), więc jest wykonywany za każdym razem:
źródło
cleanTest
wcześniejtest
nie uruchomi ponownie testów, czyści ich dane wyjściowe, ale zadanie testowe nadal będzie pobierać wyniki testów z pamięci podręcznej - patrz github.com/gradle/gradle/issues/9153--rerun-tasks
działa, ale jest nieefektywny, ponieważ odtwarza wszystkie zadania.cleanTest
samo w sobie może nie wystarczyć ze względu na bufor kompilacji.więc najlepszym sposobem na osiągnięcie tego jest:
źródło
Ponadto konieczność dodawania
--rerun-tasks
jest naprawdę zbędna. Nigdy się nie dzieje. Utwórz--no-rerun-tasks
i ustaw jako--rerun-tasks
domyślną kiedycleanTask
źródło
TL; DR
źródło
Myślę, że to ważne pytanie, biorąc pod uwagę, że w Gradle można uruchomić to polecenie
test
, a dzieje się tak, że nic się nie dzieje!Ale kwestionowałbym potrzebę zrobienia tego, jak powiedział Jolta w swoim komentarzu: jeśli żaden kod się nie zmienił, to dlaczego musisz ponownie testować? Jeśli masz wątpliwości co do danych wejściowych innych firm, powiedziałbym, że musisz uwzględnić to w kodzie aplikacji. Jeśli obawiasz się, że Twój kod może być „niestabilny”, tj. Może przejść wszystkie testy za pierwszym razem, ale nie drugi (lub setny), czy nie musisz zastanawiać się, dlaczego masz te wątpliwości i je rozwiązywać?
Osobiście uważam, że jest to (bardzo drobna) wada projektowa w Gradle: jeśli wszystko jest całkowicie aktualne, zamiast pisać „BUDUJ SUKCES”, powinno być napisane „NIE ZMIENIAJ SIĘ OD OSTATNIEJ SUKCESOWEJ BUDOWY: NIC NIE ZROBIONO”.
źródło