tutorial test software para español ejercicios ejemplos ejemplo descargar configuracion java unit-testing command-line junit

java - test - Ejecute una prueba única desde una clase JUnit usando la línea de comando



junit tutorial español (3)

Puedes crear un corredor JUnit personalizado y barebones con bastante facilidad. Aquí hay uno que ejecutará un único método de prueba en la forma com.package.TestClass#methodName :

import org.junit.runner.JUnitCore; import org.junit.runner.Request; import org.junit.runner.Result; public class SingleJUnitTestRunner { public static void main(String... args) throws ClassNotFoundException { String[] classAndMethod = args[0].split("#"); Request request = Request.method(Class.forName(classAndMethod[0]), classAndMethod[1]); Result result = new JUnitCore().run(request); System.exit(result.wasSuccessful() ? 0 : 1); } }

Puedes invocarlo así:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner com.mycompany.product.MyTest#testB

Después de echar un rápido vistazo a la fuente de JUnit, llegué a la misma conclusión que usted de que JUnit no es compatible con esto de forma nativa. Esto nunca ha sido un problema para mí, ya que todos los IDE tienen integraciones JUnit personalizadas que le permiten ejecutar el método de prueba bajo el cursor, entre otras acciones. Nunca he ejecutado pruebas de JUnit directamente desde la línea de comando; Siempre he dejado que el IDE o la herramienta de construcción (Ant, Maven) se encarguen de eso. Especialmente dado que el punto de entrada de la CLI por defecto (JUnitCore) no produce ningún resultado de salida que no sea un código de salida distinto de cero en la (s) falla (s) de prueba.

NOTA: para la versión JUnit> = 4.9 necesita la librería hamcrest en classpath

Estoy tratando de encontrar un enfoque que me permita ejecutar una única prueba de una clase JUnit usando solo línea de comando y java.

Puedo ejecutar todo el conjunto de pruebas de la clase usando lo siguiente:

java -cp .... org.junit.runner.JUnitCore org.package.classname

Lo que realmente quiero hacer es algo como esto:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

o:

java -cp .... org.junit.runner.JUnitCore org.package.classname#method

Me di cuenta de que podría haber maneras de hacer esto usando anotaciones JUnit, pero preferiría no modificar el origen de mis clases de prueba a mano (intentando automatizar esto). También vi que Maven podría tener una forma de hacerlo, pero si es posible, me gustaría evitar depender de Maven.

Entonces, me pregunto si hay alguna forma de hacer esto.

Puntos clave que estoy buscando:

  • Posibilidad de ejecutar una única prueba desde una clase de prueba JUnit
  • Línea de comando (usando JUnit)
  • Evite modificar la fuente de prueba
  • Evite usar herramientas adicionales

Usamos IntelliJ, y pasamos bastante tiempo tratando de resolverlo también.

Básicamente, implica 2 pasos:

Paso 1: compila la clase de prueba

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

Paso 2: ejecuta la prueba

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest


Utilizo Maven para construir mi proyecto y uso el plugin maven SureFire para ejecutar pruebas junit. Siempre que tenga esta configuración, puede hacer:

mvn -Dtest=GreatTestClass#testMethod test

En este ejemplo, simplemente ejecutamos un método de prueba llamado "testMethod" dentro de la clase "GreatTestClass".

Para obtener más información, consulte http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html