2010-04-22 24 views
9

tengo una clase de prueba que estoy tratando de huir de un método principal con el código folowing:JUnitCore.runClasses no imprime nada

Result r = org.junit.runner.JUnitCore.runClasses(TestReader.class); 

cuando examino el objeto Resultado puedo ver que 5 Se han realizado pruebas pero no se imprime nada en la pantalla.

¿Debo hacer algo más para obtener una salida?

Respuesta

3

No hay una manera muy clara de hacerlo, ya que no es algo común de hacer. Solo necesita imprimir el resultado si está creando un programa que puede usarse para ejecutar pruebas en la línea de comando, y JUnitCore lo hace.

Todas las opciones implican el uso de clases en un paquete interno.

Result r = JUnitCore.runMain(new RealSystem(), TestReader.class.getName()) 

Si desea imprimir a algo distinto de System.out, puede crear su propia subclase de org.junit.internal.JUnitSystem y el uso que en lugar de RealSystem

También puede utilizar org.junit.internal.TextListener. Consulte runMain(JUnitSystem system, String... args) en the JUnitCore source para ver un ejemplo.

+0

¿Puede ejemplo por qué "no es una cosa común que hacer". Llamar a RunClasses se describe en el libro de cocina. Si hay otra forma de hacerlo, ¿qué es? – cmcginty

+0

La única vez que llama a 'runClasses()' es si está escribiendo su propio código para ejecutar pruebas. Usualmente usted tiene JUnitCore como su clase principal, ejecuta las pruebas desde su IDE, o usa algo que vino incorporado en su sistema de compilación para ejecutar las pruebas. Si necesita escribir una clase personalizada para ejecutar sus pruebas, la forma habitual es usar org.junit.runner.notification.RunListener'. Personalmente, me ha molestado ver cuántas veces tengo que hacer algo en JUnit4 y encontrar clases internas para ser la única solución. – NamshubWriter

20

Sí, usted tiene que registrarse TextListener así:

JUnitCore junit = new JUnitCore(); 
    junit.addListener(new TextListener(System.out)); 
    junit.run(TestReader.class); 
+0

JUnit 4.11 no viene con TextListener en el archivo. ¿Qué hago en ese caso? – djangofan

+1

@djangofan: es org.junit.internal.TextListener, en 4.11. –

+0

El método 'runClasses (...)' crea un nuevo 'JUnitCore' nuevo para que los oyentes se pierdan (vea [código en github] (https://github.com/junit-team/junit4/blob/a832c5afe5b0e7c2590d057a1a49a344d207f8a0/src /main/java/org/junit/runner/JUnitCore.java#L62)). Es por eso que deberías usar 'run()' en su lugar. – ecerulm