Cómo ejecutar casos de prueba JUnit desde la línea de comando


333

Me gustaría ejecutar casos de prueba JUnit desde la línea de comandos. ¿Cómo puedo hacer esto?


pregunta similar de Android Junit: stackoverflow.com/q/11144466/611007
n611x007

documentos de Android: ejecutar pruebas en un dispositivo o emulador (desde la línea de comandos). (a través de andreea.sandu)
n611x007


javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.javatrabajó para mi. Tenga en cuenta el punto final: ¡es importante!
analizador el

Respuestas:


274

Para JUnit 5.x es:

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

Encuentre un breve resumen en https://stackoverflow.com/a/52373592/1431016 y detalles completos en https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher

Para JUnit 4.X es realmente:

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

Pero si está utilizando JUnit 3.X, tenga en cuenta que el nombre de la clase es diferente:

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

Es posible que deba agregar más JAR o directorios con sus archivos de clase al classpath y separarlos con punto y coma (Windows) o dos puntos (UNIX / Linux). Depende de tu entorno.

Editar: he agregado el directorio actual como ejemplo. Depende de su entorno y de cómo construya su aplicación (puede ser bin / o build / o incluso my_application.jar, etc.). Tenga en cuenta que Java 6+ admite globs en classpath, puede hacer:

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

Espero eso ayude. Escribir pruebas! :-)


@Izap ¿Alguna idea para determinar programáticamente si una prueba está usando JUnit4 o JUnit3?
Goaler444

2
Class.forName supongo. Hace años que estaba programando en Java por última vez ...
lzap

¿Y si estás usando Android?
n611x007

1
La documentación para el argumento "-cp" (es decir, CLASSPATH) está aquí (Java 7, Unix) y aquí (Tutorial) y aquí (Java 8, Unix) y aquí (Java 8, Windows) . Aparentemente, ahora se admiten comodines en el classpath.
David Tonhofer

1
Voto a favor. Para JUnit 4.x no está bien. Sus instrucciones dan "No se pudo encontrar la clase: [nombre de la clase de prueba]" Incluso cuando [nombre de la clase de prueba] está en el classpath.
Philip Rego

117

Camino Maven

Si usa Maven, puede ejecutar el siguiente comando para ejecutar todos sus casos de prueba:

mvn clean test

O puede ejecutar una prueba particular como se muestra a continuación

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

Si desea ver el seguimiento de la pila (si corresponde) en la consola en lugar de los archivos de informe en la carpeta target \ surefire-reports, establezca la propiedad del usuario surefire.useFile en false. Por ejemplo:

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

Camino de gradle

Si usa Gradle, puede ejecutar el siguiente comando para ejecutar todos sus casos de prueba:

gradle test

O puede ejecutar una prueba particular como se muestra a continuación

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

Si desea obtener más información, puede considerar opciones como --stacktrace, o --info, o --debug.

Por ejemplo, cuando ejecuta Gradle con el nivel de registro de información --info, le mostrará el resultado de cada prueba mientras se está ejecutando. Si hay alguna excepción, le mostrará el seguimiento de la pila, señalando cuál es el problema.

gradle test --info

Si desea ver los resultados generales de la prueba, puede abrir el informe en el navegador, por ejemplo (ábralo con Google Chrome en Ubuntu):

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

Camino hormiga

Una vez que configure su archivo de compilación Ant build.xml, puede ejecutar sus casos de prueba JUnit desde la línea de comandos como se muestra a continuación:

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

Puede seguir el siguiente enlace para leer más sobre cómo configurar las pruebas JUnit en el archivo de compilación Ant: https://ant.apache.org/manual/Tasks/junit.html

Manera normal

Si no usa Maven, Gradle o Ant, puede seguir la siguiente manera:

En primer lugar, debe compilar sus casos de prueba. Por ejemplo (en Linux):

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

Luego ejecuta tus casos de prueba. Por ejemplo:

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
Me gusta que esta respuesta tenga ejemplos para múltiples tecnologías, ¡felicitaciones!
Josie Thompson el

¿Qué pasa con las pruebas maravillosas utilizando el último enfoque?
midori

1
Insignia de oro bien merecida;)
Eric Duminil

Gracias por la versión para gradle! ¡Prestigio!
Ady

52

La respuesta que dio @lzap es una buena solución. Sin embargo, me gustaría agregar que debe agregar. a la ruta de clase, para que su directorio actual no se quede fuera, lo que da como resultado que sus propias clases se queden fuera. Esto me ha pasado en algunas plataformas. Entonces, una versión actualizada para JUnit 4.x sería:

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

1
se supone que eso es un punto y coma?
panny

14
@panny es un punto y coma en Windows. En el entorno n * nix (al menos OSX y todas las distribuciones de Linux que he usado) usa dos puntos.
rand_acs

1
@rand_acs ¿el nombre de la clase de prueba debe ser el nombre de clase completamente clasificado?
Goaler444

1
@ Goaler444 Sí, siempre uso el nombre completo, con todos los espacios de nombres especificados.
rand_acs

22

Asegúrese de que JUnit.jar esté en su classpath, luego invoque el corredor de línea de comando desde la consola

java org.junit.runner.JUnitCore [nombre de clase de prueba]

Referencia: Preguntas frecuentes sobre junit


44
También debe configurar el resto de la ruta de clase de su proyecto.
Thilo

Esto solo da "No se pudo encontrar la clase: [nombre de la clase de prueba]" incluso cuando [nombre de la clase de prueba] está en el classpath.
Philip Rego

19

Con JUnit 4.12, lo siguiente no funcionó para mí:

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

Aparentemente , desde JUnit 4.11 en adelante también deberías incluir hamcrest-core.jaren tu classpath:

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

Tuve el mismo problema con JUnit 4.12. Se me ocurrió una solución similar, pero no funcionó para mí, al no cargar JUnitCore. Básicamente cambié a JUnit 4.8.2 ya que no requiere incluir hamcrest-core.jar en el classpath.
Vladimir Nazarenko

Confirmó que esto debe hacerse con JUnit 4.12. +1.
rayryeng

Esto funcionó para mí:java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

En windows es

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [nombre de clase de prueba sin extensión .class]

por ejemplo: c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ...y así sucesivamente, si uno tiene más de una clase de prueba.

-cp significa ruta de clase y el punto (.) representa la ruta de clase existente, mientras que el punto y coma (;) agrega el jar adicional dado a la ruta de clase, como en el ejemplo anterior junit-4.8.2 ahora está disponible en classpath para ejecutar la clase JUnitCore que Aquí hemos utilizado para ejecutar nuestras clases de prueba.

La instrucción de línea de comando anterior le ayuda a ejecutar pruebas junit (versión 4+) desde el símbolo del sistema (es decir, MSDos).

Nota: JUnitCore es una fachada para ejecutar pruebas de junit, esta fachada se incluye en 4+ versiones de junit.


Por favor explique su respuesta en muy breve.
Mohit Jain

No te pedí que mantuvieras tu respuesta breve. Solicité agregar alguna explicación (al menos una breve explicación). Es una buena práctica explicar cómo funciona su respuesta. Los lectores pueden entenderlo, me gusta, votarlo.
Mohit Jain

entonces, si tuviera un jar de prueba suplementario Y el jarin junit jar, ¿tendría que tener ambos en el comando java -cp para que algo funcione realmente? ¿Hay alguna forma de evitar tener que poner todo esto en una línea de comando para que no tenga que escribir tantas cosas?
Ungeheuer

5

En realidad, también puede hacer que Junit pruebe un Jar ejecutable y llame al jar ejecutable como java -jar


2
En Eclipse, haga clic derecho en su proyecto JUnit -> Haga clic en Exportar -> Elija Java-> Archivo Jar
ejecutable

4

Si su proyecto está basado en Maven, puede ejecutar todos los métodos de prueba desde la clase de prueba CustomTest que pertenece al módulo 'my-module' usando el siguiente comando:

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

O ejecute solo 1 método de prueba myMethod desde test-class CustomTest usando el siguiente comando:

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

Para esta capacidad necesita Maven Surefire Plugin v.2.7.3 + y Junit 4. Más detalles aquí: http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html


4

Personalmente, usaría el corredor JUvenit seguro de Maven para hacer eso.



-1

Si su proyecto está basado en hormigas, entonces debería poder hacer algo así desde la consola:

ant test

Si esto no funciona, pero aún así su proyecto está basado en hormigas, puede ejecutar ant -ppara enumerar los principales objetivos del proyecto.


2
la Q no tiene nada que ver con la hormiga
accuya

3
Por eso dije "si tu proyecto está basado en hormigas". Tenga en cuenta también que el OP puede no saber sobre hormiga.
cherouvim

Tenía este dillema, los archivos de prueba de la unidad no estaban en la carpeta marcada como fuente por eclipse. Ese proyecto usa hormiga para construir, esta era la forma correcta de ejecutar esas pruebas JUnit.
Andrzej Rehmann
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.