Come eseguire casi di test JUnit dalla riga di comando


333

Vorrei eseguire i casi di test JUnit dalla riga di comando. Come posso fare questo?


simile Android domanda JUnit: stackoverflow.com/q/11144466/611007
n611x007

documenti Android: esecuzione di test su un dispositivo o emulatore (dalla riga di comando). ( via andreea.sandu)
n611x007


javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javaha funzionato per me. Nota il punto finale: è importante!
parsecer

Risposte:


274

Per JUnit 5.x è:

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

Trova un breve riepilogo su https://stackoverflow.com/a/52373592/1431016 e tutti i dettagli su https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

Per JUnit 4.X è davvero:

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

Ma se si utilizza JUnit 3.X , il nome della classe è diverso:

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

Potrebbe essere necessario aggiungere più JAR o directory con i file di classe al percorso di classe e separarli con punti e virgola (Windows) o due punti (UNIX / Linux). Dipende dal tuo ambiente.

Modifica: ho aggiunto la directory corrente come esempio. Dipende dal tuo ambiente e da come costruisci la tua applicazione (può essere bin / o build / o anche my_application.jar ecc.). Nota Java 6+ supporta globs in classpath, puoi fare:

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

Spero che sia d'aiuto. Scrivi i test! :-)


@Izap Qualche idea per determinare programmaticamente se un test utilizza JUnit4 o JUnit3?
Goaler444

2
Class.forName immagino. Sono anni che sto programmando in Java per l'ultima volta ...
lzap,

e se si utilizza Android?
n611x007,

1
La documentazione per l'argomento "-cp" (ovvero CLASSPATH) è qui (Java 7, Unix) e qui (Tutorial) e qui (Java 8, Unix) e qui (Java 8, Windows) . Apparentemente i caratteri jolly nel percorso di classe sono ora supportati.
David Tonhofer,

1
Downvote. Per JUnit 4.x non è giusto. Le tue istruzioni forniscono "Impossibile trovare la classe: [nome classe test]" Anche quando [nome classe test] si trova nel percorso di classe.
Philip Rego,

117

Via Maven

Se si utilizza Maven, è possibile eseguire il comando seguente per eseguire tutti i casi di test:

mvn clean test

Oppure puoi eseguire un test particolare come di seguito

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

Se si desidera visualizzare la traccia dello stack (se presente) nella console anziché i file di report nella cartella target \ surefire-reports, impostare la proprietà dell'utente surefire.useFile su false. Per esempio:

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

Gradle way

Se si utilizza Gradle, è possibile eseguire il comando seguente per eseguire tutti i casi di test:

gradle test

Oppure puoi eseguire un test particolare come di seguito

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

Se desideri maggiori informazioni, puoi prendere in considerazione opzioni come --stacktrace, - --info o --debug.

Ad esempio, quando esegui Gradle con il livello di registrazione delle informazioni --info, ti mostrerà il risultato di ogni test mentre sono in esecuzione. Se c'è qualche eccezione, ti mostrerà la traccia dello stack, indicando qual è il problema.

gradle test --info

Se desideri vedere i risultati complessivi del test, puoi aprire il rapporto nel browser, ad esempio (Aprilo usando Google Chrome in Ubuntu):

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

Modo della formica

Una volta impostato il file build.xml di Ant build, è possibile eseguire i casi di test JUnit dalla riga di comando come di seguito:

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

È possibile seguire il collegamento seguente per ulteriori informazioni su come configurare i test JUnit nel file di build Ant: https://ant.apache.org/manual/Tasks/junit.html

Modo normale

Se non usi Maven, o Gradle o Ant, puoi seguire la seguente procedura:

Prima di tutto, devi compilare i tuoi casi di test. Ad esempio (in Linux):

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

Quindi eseguire i casi di test. Per esempio:

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
Mi piace che questa risposta abbia degli esempi per più tecnologie, complimenti!
Josie Thompson,

che dire dei test groovy usando l'ultimo approccio?
Midori,


Grazie per la versione per Gradle! Complimenti!
ady

52

La risposta che @lzap ha dato è una buona soluzione. Tuttavia, vorrei aggiungere che dovresti aggiungere. al percorso della classe, in modo tale che la directory corrente non venga esclusa, in modo da escludere le proprie classi. Questo mi è successo su alcune piattaforme. Quindi una versione aggiornata per JUnit 4.x sarebbe:

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

1
dovrebbe essere un punto e virgola?
panny

14
@panny è un punto e virgola su Windows. In ambiente n * nix (almeno OSX e tutte le distro Linux che ho usato) usi i due punti.
rand_acs,

1
@rand_acs il nome della classe di test deve essere il nome completo della classe?
Goaler444

1
@ Goaler444 Sì, utilizzo sempre il nome completo, con tutti gli spazi dei nomi specificati.
rand_acs

22

Assicurati che JUnit.jar sia nel tuo percorso di classe, quindi invoca il runner della riga di comando dalla console

java org.junit.runner.JUnitCore [nome classe test]

Riferimento: FAQ junit


4
devi anche impostare il resto del percorso di classe del tuo progetto.
Thilo,

Questo dà solo "Impossibile trovare la classe: [nome classe test]" anche quando [nome classe test] si trova nel percorso di classe.
Philip Rego,

19

Con JUnit 4.12 per me non ha funzionato:

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

Apparentemente , da JUnit 4.11 in poi dovresti anche includere hamcrest-core.jarnel tuo percorso di classe:

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

Ha avuto lo stesso problema con JUnit 4.12. È venuto con una soluzione simile, ma non ha funzionato per me, non riuscendo a caricare JUnitCore. In pratica sono passato a JUnit 4.8.2 in quanto non richiede di includere hamcrest-core.jar nel percorso di classe.
Vladimir Nazarenko,

Confermato che questo deve essere fatto con JUnit 4.12. +1.
Rayryeng

Questo ha funzionato per me:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian,

11

In Windows lo è

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [nome della classe di prova senza estensione .class]

per esempio: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...e così via, se uno ha più di una classe di test.

-cp indica il percorso di classe e il punto (.) rappresenta il percorso di classe esistente mentre i due punti (;) aggiungono il jar dato aggiuntivo al percorso di classe, poiché nell'esempio precedente junit-4.8.2 è ora disponibile nel percorso di classe per eseguire la classe JUnitCore che qui abbiamo usato per eseguire le nostre classi di test.

L'istruzione della riga di comando sopra riportata consente di eseguire i test junit (versione 4+) dal prompt dei comandi (ad es. MSDos).

Nota: JUnitCore è una facciata per eseguire test di junit, questa facciata è inclusa in 4+ versioni di junit.


Spiega la tua risposta in breve tempo.
Mohit Jain,

Non ti ho chiesto di mantenere breve la tua risposta. Ho chiesto di aggiungere alcune spiegazioni (almeno una breve spiegazione). È buona norma spiegare come funziona la tua risposta. I lettori possono capirlo, piace, votarlo.
Mohit Jain,

quindi se avessi un jar di test supplementare E il jar junit vanilla, Id dovrei avere entrambi quelli nel comando java -cp affinché qualcosa funzioni davvero? Esiste un modo per evitare di inserire tutto questo in una riga di comando in modo da non dover scrivere troppe cose?
Ungeheuer,

5

In realtà puoi anche rendere Junit test un Jar eseguibile e chiamare il jar eseguibile come java -jar


2
In Eclipse, fai clic con il pulsante destro del mouse sul progetto JUnit -> Fai clic su Esporta -> Scegli Java-> File Jar
eseguibile

4

Se il tuo progetto è basato su Maven, puoi eseguire tutti i metodi di test dal test CustomTest di classe che appartiene al modulo 'my-module' usando il comando successivo:

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

Oppure esegui solo 1 metodo test myMethod dal testTest CustomTest utilizzando il comando successivo:

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

Per questa capacità sono necessari Maven Surefire Plugin v.2.7.3 + e Junit 4. Maggiori dettagli sono disponibili qui: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


4

Personalmente avrei usato il corridore JUnit infallibile Maven per farlo.



-1

Se il tuo progetto è basato su formica, dovresti essere in grado di fare qualcosa del genere dalla console:

ant test

Se questo non funziona, ma il tuo progetto è ancora basato su formica, puoi eseguire ant -pper elencare i principali obiettivi del progetto.


2
la Q non ha nulla a che fare con la formica
accuya,

3
Ecco perché ho detto "se il tuo progetto è basato su formiche". Si noti inoltre che l'OP potrebbe non conoscere la formica.
Cherouvim,

Ho avuto questo dillema, i file di unit test non erano nella cartella contrassegnata come sorgente da eclipse. Quel progetto usa la formica per costruire, questo era il modo corretto di eseguire quei test JUnit.
Andrzej Rehmann,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.