Jak uruchomić przypadki testowe JUnit z wiersza poleceń


333

Chciałbym uruchomić przypadki testowe JUnit z wiersza poleceń. W jaki sposób mogę to zrobić?


podobne pytanie dla Androida : stackoverflow.com/q/11144466/611007
n611x007

Dokumenty Androida: uruchamianie testów na urządzeniu lub emulatorze (z wiersza poleceń). ( via andreea.sandu)
n611x007


javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javapracował dla mnie. Uwaga końcowa kropka - to ważne!
parsecer

Odpowiedzi:


274

W przypadku JUnit 5.x jest to:

java -jar junit-platform-console-standalone-<version>.jar <Options>

Znajdź krótkie streszczenie na https://stackoverflow.com/a/52373592/1431016, a pełne szczegóły na https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

W przypadku JUnit 4.X jest to naprawdę:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Ale jeśli używasz JUnit 3.X zwróć uwagę, że nazwa klasy jest inna:

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

Może być konieczne dodanie większej liczby plików JAR lub katalogów z plikami klas do ścieżki klasy i oddzielenie ich średnikami (Windows) lub dwukropkami (UNIX / Linux). To zależy od twojego środowiska.

Edycja: dodałem bieżący katalog jako przykład. Zależy od środowiska i sposobu budowania aplikacji (może to być bin / lub build / a nawet my_application.jar itp.). Uwaga: Java 6+ obsługuje globusy w ścieżce klas, możesz:

java -cp lib/*.jar:/usr/share/java/junit.jar ...

Mam nadzieję, że to pomoże. Napisz testy! :-)


@Izap Masz pomysł, aby programowo ustalić, czy test używa JUnit4 czy JUnit3?
Goaler444,

2
Class.forName Chyba.
Minęły

a co, jeśli używasz Androida?
n611x007,

1
Dokumentacja argumentu „-cp” (tj. CLASSPATH) jest tutaj (Java 7, Unix) i tutaj (Tutorial) i tutaj (Java 8, Unix) i tutaj (Java 8, Windows) . Widocznie symbole wieloznaczne w ścieżce klasy są teraz obsługiwane.
David Tonhofer,

1
Głosuj W przypadku JUnit 4.x jest to niewłaściwe. W instrukcjach podano „Nie można znaleźć klasy: [nazwa klasy testowej]” Nawet jeśli [nazwa klasy testowej] znajduje się w ścieżce klasy.
Philip Rego,

117

Maven way

Jeśli używasz Maven, możesz uruchomić następującą komendę, aby uruchomić wszystkie przypadki testowe:

mvn clean test

Lub możesz uruchomić określony test, jak poniżej

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

Jeśli chcesz zobaczyć ślad stosu (jeśli istnieje) w konsoli zamiast plików raportów w folderze docelowym \ surefire-raporty, ustaw właściwość użytkownika surefire.useFile na wartość false. Na przykład:

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

Stopniowy sposób

Jeśli używasz opcji Gradle, możesz uruchomić następujące polecenie, aby uruchomić wszystkie przypadki testowe:

gradle test

Lub możesz uruchomić określony test, jak poniżej

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

Jeśli chcesz uzyskać więcej informacji, możesz rozważyć takie opcje, jak --stacktrace, --info lub --debug.

Na przykład, gdy uruchomisz Gradle z poziomem rejestrowania informacji - info, pokaże on wynik każdego testu podczas jego działania. Jeśli jest jakiś wyjątek, pokaże on ślad stosu, wskazując na czym polega problem.

gradle test --info

Jeśli chcesz zobaczyć ogólne wyniki testu, możesz na przykład otworzyć raport w przeglądarce (otwórz go za pomocą Google Chrome w Ubuntu):

google-chrome build/reports/tests/index.html

Sposób mrówki

Po skonfigurowaniu pliku kompilacji Anta build.xml możesz uruchomić przypadki testowe JUnit z wiersza poleceń, jak poniżej:

ant -f build.xml <Your JUnit test target name>

Możesz kliknąć poniższy link, aby dowiedzieć się więcej na temat konfigurowania testów JUnit w pliku kompilacji Ant: https://ant.apache.org/manual/Tasks/junit.html

Normalny sposób

Jeśli nie korzystasz z Maven, Gradle lub Ant, możesz postępować w następujący sposób:

Przede wszystkim musisz skompilować swoje przypadki testowe. Na przykład (w systemie Linux):

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

Następnie uruchom swoje przypadki testowe. Na przykład:

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName

1
Podoba mi się, że ta odpowiedź zawiera przykłady wielu technologii, uwielbienie!
Josie Thompson

a co z testami Groovy przy użyciu ostatniego podejścia?
midori

1
Zasłużona złota odznaka;)
Eric Duminil

Dzięki za wersję dla gradle! Sława!
ady

52

Odpowiedź udzielona przez @lzap jest dobrym rozwiązaniem. Chciałbym jednak dodać, że należy dodać. do ścieżki klasy, aby bieżący katalog nie został pominięty, co spowoduje, że własne klasy zostaną pominięte. Zdarzyło mi się to na niektórych platformach. Zaktualizowana wersja JUnit 4.x będzie:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

1
czy to ma być dwukropek?
panny

14
@panny to średnik w systemie Windows. W środowisku n * nix (przynajmniej OSX i wszystkie dystrybucje Linuksa, których użyłem) używasz dwukropka.
rand_acs

1
@rand_acs czy nazwa klasy testowej musi być w pełni sklasyfikowaną nazwą klasy?
Goaler444,

1
@ Goaler444 Tak, zawsze używam pełnej nazwy ze wszystkimi określonymi przestrzeniami nazw.
rand_acs

22

Upewnij się, że JUnit.jar znajduje się w ścieżce klasy, a następnie uruchom konsolę z linii poleceń

java org.junit.runner.JUnitCore [nazwa klasy testowej]

Odniesienie: FAQ FAQ


4
musisz także ustawić pozostałą ścieżkę klasy swojego projektu.
Thilo,

Daje to po prostu „Nie można znaleźć klasy: [nazwa klasy testowej]”, nawet jeśli [nazwa klasy testowej] znajduje się w ścieżce klasy.
Philip Rego,

19

W JUnit 4.12 nie działało dla mnie:

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

Najwyraźniej od JUnit 4.11 należy również dołączyć hamcrest-core.jardo ścieżki klasy:

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

Miał ten sam problem z JUnit 4.12. Wymyśliłem podobne rozwiązanie, ale nie zadziałało dla mnie, nie udało się załadować JUnitCore. Zasadniczo przerzuciłem się na JUnit 4.8.2, ponieważ nie wymaga on włączenia hamcrest-core.jar do ścieżki klasy.
Vladimir Nazarenko

Potwierdzono, że należy to zrobić za pomocą JUnit 4.12. +1.
rayryeng

To zadziałało dla mnie:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

W Windowsie jest

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [nazwa klasy testowej bez rozszerzenia .class]

na przykład: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...i tak dalej, jeśli ktoś ma więcej niż jedną klasę testową.

-cp oznacza ścieżkę klasy, a kropka (.) reprezentuje istniejącą ścieżkę klasy, natomiast średnik (;) dołącza dodatkowy podany jar do ścieżki klasy, jak w powyższym przykładzie junit-4.8.2 jest teraz dostępny w ścieżce klasy do wykonania klasy JUnitCore, która tutaj wykonywaliśmy nasze klasy testowe.

Powyższa instrukcja wiersza poleceń pomaga wykonywać testy junit (wersja 4+) z wiersza polecenia (np. MSDos).

Uwaga: JUnitCore to fasada do wykonywania testów junit, ta fasada jest zawarta w ponad 4 wersjach junit.


Proszę bardzo krótko wyjaśnić swoją odpowiedź.
Mohit Jain

Nie prosiłem cię, byś zwięźle odpowiedział. Poprosiłem o dodanie jakiegoś wyjaśnienia (przynajmniej krótkiego wyjaśnienia). Dobrą praktyką jest wyjaśnienie, w jaki sposób działa twoja odpowiedź. Czytelnicy mogą to zrozumieć, polubić to.
Mohit Jain

więc jeśli miałbym dodatkowy słoik testowy ORAZ słoik waniliowy, musiałbym mieć oba w komendzie java -cp, aby cokolwiek faktycznie zadziałało? Czy jest jakiś sposób na umieszczenie tego wszystkiego w wierszu poleceń, aby nie musiałem pisać tyle rzeczy?
Ungeheuer,

5

W rzeczywistości możesz również sprawić, aby test Junita był uruchamialnym słoikiem i nazwać go jako java -jar


2
W Eclipse kliknij prawym przyciskiem myszy swój projekt JUnit -> kliknij Eksportuj -> Wybierz Java-> Runnable Jar File
Indraneel

4

Jeśli twój projekt jest oparty na Maven, możesz uruchomić wszystkie metody testowe z klasy testowej CustomTest, która należy do modułu „mój-moduł”, używając następnej komendy:

mvn clean test -pl :my-module -Dtest=CustomTest

Lub uruchom tylko 1 metodę testową myMethod z klasy testowej CustomTest, używając następnego polecenia:

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

Do tej umiejętności potrzebujesz Maven Surefire Plugin v.2.7.3 + i Junit 4. Więcej szczegółów tutaj: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html




-1

Jeśli projekt jest oparty na mrówkach, powinieneś być w stanie zrobić coś takiego z konsoli:

ant test

Jeśli to nie zadziała, ale nadal Twój projekt jest oparty na mrówkach, możesz uruchomić, ant -paby wyświetlić listę głównych celów projektu.


2
Q nie ma nic wspólnego z ant
accuya

3
Dlatego powiedziałem „jeśli twój projekt jest oparty na mrówkach”. Zauważ też, że OP może nie wiedzieć o mrówce.
cherouvim

Miałem ten dillema, pliki testów jednostkowych nie były w folderze oznaczonym jako źródło zaćmieniem. Ten projekt używa mrówki do budowania. To był właściwy sposób na uruchomienie testów JUnit.
Andrzej Rehmann
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.