2012-09-16 51 views
14

Tengo una configuración de prueba para un sistema en la nube que usa una mezcla de python para el control de nivel de proceso y junit para la inspección de estado interno. Básicamente, traigo varias máquinas virtuales al servidor como la nube y luego una máquina virtual junit que es miembro de la nube, pero controla las pruebas y comprueba el estado interno. Nuestro material de administración de la nube es manejado por python y me gustaría mantener esto.Generación de informes JUnit desde la línea de comandos

Tengo una configuración de trabajo que se ejecutará la línea de comandos a través de JUnit

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests> 

pero esto no produce un archivo de informe. Sé que la hormiga es capaz de producir un informe xml, pero no quiero involucrar a la hormiga en este proceso (ya tengo suficientes piezas móviles).

¿Hay alguna forma de ejecutar junit desde la línea de comandos para que produzca un informe?

Lo ideal sería que las pruebas junit produjeran informes xml, las pruebas de python producen informes xml y luego las fusionen para su consumo por nuestro sistema CI.

Actualización: La ejecución de la línea de comandos debe ser compatible con Windows, Linux y Mac. No se nos permite enviar una hormiga externa, aunque se puede empaquetar una hormiga interna como opción.

+0

Windows o Unix (en términos de línea de comandos)? –

Respuesta

16

La biblioteca JUnit no tiene ninguna opción de salida XML. Para lograr esto, deberá escribir su propio RunListener, que escuchará el resultado y en su caso escribirá el archivo XML.

Sin embargo, para obtener el archivo XML en el formato correcto para que pueda ser leído por el sistema CI, creo que sería mucho más fácil usar hormiga, ya sea a través de la línea de comando usando un build.xml (JUnitReport) , o usando la API de Java: How can i use Apache ANT Programmatically.

EDIT: En un principio, que tenía cuatro opciones:

  1. uso de hormigas desde la línea de comandos
  2. Uso hormiga programación (utilizando la API de Java)
  3. Uso del XMLJUnitResultFormatter directamente con JUnitCore
  4. Crear un RunListener personalizado que produce la salida XML correcta.

Dadas las restricciones añadidas por la OP, que no pueden utilizar la hormiga de la línea de comandos, lo que elimina 1.

Después de mirar más de cerca la tarea Ant JUnit, parece ser imposible de usar esto con JUnitCore (agregando un TestListener), porque ant utiliza directamente el nombre de la clase de prueba, por lo que no puede hacer una clase puente. De XMLJUnitResultFormatter.java

private void formatError(String type, Test test, Throwable t) { 
    ... 
    nested.setAttribute(ATTR_TYPE, t.getClass().getName()); 

    String strace = JUnitTestRunner.getFilteredTrace(t); 
    Text trace = doc.createTextNode(strace); 
    nested.appendChild(trace); 
} 

Esto elimina 3.

invocación Ant mediante programación, a través de la API de Java. No puedo encontrar ninguna documentación reciente sobre esto. Esto parece ser difícil.

Así que, finalmente, haría 4, un RunListener personalizado, usando el código de XMLJUnitResultFormatter como base. Y luego, lo publicaría en github.com, por lo que esta pregunta podría responderse correctamente :-)

+0

Lo siento, parecen incapaces de hacer saltos de línea aparecen ... Si he entendido bien, que están sugiriendo que debería: 1) incluir el frasco hormiga 2) escribe una costumbre principal 3) añadir RunListener de la jarra de hormigas a una instancia de JUnitCore 4) dejarlo rasgar? o hay una versión más corta de la forma 1) incluyen el frasco hormiga 2) invocar de forma más directa y que se encargará de la porción JUnitCore? – Matt

+1

Ant invoca junit, ejecuta las pruebas. Así que le proporcionaría un build.xml e invocaría a la hormiga. La forma más sencilla sería asegurarse de que hormiga se haya instalado en algún lugar de su sistema, y ​​luego simplemente hacerlo desde la línea de comandos. En lugar de java ... tendrías hormiga ... –

+1

Por desgracia, requerir una hormiga de instalación es una de las cosas que no puedo hacer. Este mensaje bajó desde lo alto. – Matt

Cuestiones relacionadas