Wiem, że pojedynczy test można uruchomić, uruchamiając w sbt,
testOnly *class -- -n Tag
Czy istnieje sposób na poinformowanie sbt / scalatest, aby uruchomił pojedynczy test bez tagów? Na przykład:
testOnly *class -- -X 2
oznaczałoby to „uruchom drugi test w klasie. Cokolwiek to jest”. Mamy kilka testów i nikt nie zadał sobie trudu, aby je oznaczyć, więc czy istnieje sposób na uruchomienie pojedynczego testu bez tagu?
sbt
cudzysłowach , np.sbt "test-only *SingleTestSuite"
Odpowiedzi:
Jest to teraz obsługiwane (od ScalaTest 2.1.3) w trybie interaktywnym:
aby uruchamiać tylko testy, których nazwa zawiera podciąg „foo”.
Aby uzyskać dokładne dopasowanie zamiast podłańcucha, użyj
-t
zamiast-z
.źródło
-t
do dokładnego dopasowania? Nie mogę zmusić go do pracy.src/it
), muszą poprzedzićit
dotestOnly
. Na przykład, w wierszu poleceń:sbt "it:testOnly *MyIntegrationTestSuite"
.when
ishould
mogą być powtarzane między testami. Aby wybrać jeden konkretny test, muszę powiedzieć „nazwa zawiera to i tamto”.Chciałem dodać konkretny przykład towarzyszący pozostałym odpowiedziom
Musisz podać nazwę klasy, którą chcesz przetestować, więc jeśli masz następujący projekt (jest to projekt Play):
Możesz przetestować tylko
Login
testy, uruchamiając następujące polecenie z konsoli SBT:Jeśli uruchamiasz polecenie spoza konsoli SBT, wykonaj następujące czynności:
źródło
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
i na zewnątrz:sbt "testOnly *LoginServiceSpec"
Nie widzę sposobu na uruchomienie pojedynczego nieoznaczonego testu w klasie testowej, ale zapewniam mój przepływ pracy, ponieważ wydaje się być przydatny dla każdego, kto napotka to pytanie.
Z sesji SBT:
(Gwiazdka jest symbolem wieloznacznym, możesz określić pełną ścieżkę
com.example.specs.YourTestClass
).Wszystkie testy w tej klasie testowej zostaną wykonane. Prawdopodobnie najbardziej martwisz się niepowodzeniem testów, więc popraw wszystkie błędne implementacje, a następnie uruchom:
... który wykona tylko te testy, które zakończyły się niepowodzeniem. (Powtórzenie ostatnio wykonanego
test:testOnly
polecenia będzie takie samo, jaktest:testQuick
w tym przypadku, ale jeśli podzielisz swoje metody testowe na odpowiednie klasy testowe, możesz użyć symbolu wieloznacznego, abytest:testQuick
wydajniej ponownie uruchomić testy zakończone niepowodzeniem).Zwróć uwagę, że nazewnictwo testów w ScalaTest to klasa testowa, a nie określona metoda testowa, więc wszystkie metody nieoznakowane są wykonywane.
Jeśli masz zbyt wiele metod testowych w klasie testowej, podziel je na oddzielne klasy lub odpowiednio oznacz. (Może to być sygnał, że testowana klasa narusza zasadę pojedynczej odpowiedzialności i może użyć refaktoryzacji).
źródło
*YourTestClass
musi to być nazwa klasy. Nie nazwa pliku.Żeby uprościć przykład Tylera.
test:
-prefix nie jest potrzebny.Więc zgodnie z jego przykładem:
W
sbt
konsoli:A w terminalu:
źródło
Oto strona Scalatest dotycząca korzystania z runnera i rozszerzonej dyskusji na temat opcji
-t
i-z
.Ten post pokazuje, jakie polecenia działają dla pliku testowego, który używa
FunSpec
.Oto plik testowy:
To polecenie uruchamia cztery testy w
iLike
bloku opisywania (z wiersza poleceń SBT):Możesz również użyć cudzysłowów, więc to również zadziała:
Spowoduje to uruchomienie pojedynczego testu:
Spowoduje to uruchomienie dwóch testów zaczynających się od „działa z”:
Nie mogę
-t
uruchomić żadnych testów wCardiBSpec
pliku. To polecenie nie uruchamia żadnych testów:Wygląda na to, że
-t
opcja działa, gdy testy nie są zagnieżdżone wdescribe
blokach. Rzućmy okiem na inny plik testowy:-t
można użyć do uruchomienia pojedynczego testu:-z
można również użyć do uruchomienia pojedynczego testu:Zobacz to repozytorium, jeśli chcesz uruchomić te przykłady.
źródło