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

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

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

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

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

Básicamente, implica 2 pasos:

Paso 1: comstack 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