2011-04-20 12 views
8

Tenemos clases de prueba que se basan en AbstractTransactionalDataSourceSpringContextTests de Spring 2.0.8. Hay una gran cantidad de estos, todos escritos en estilo JUnit3.¿Cómo puedo ejecutar un Runner JUnit4 personalizado en clases de prueba JUnit3 con Ant?

Para utilizar el filtrado JUnit 4, hemos creado un JUnit38Runner de reemplazo que nos permite unir estas pruebas a un entorno de aplicación específico y filtrarlas en consecuencia.

Todo el conjunto de pruebas funciona muy bien fuera de la hormiga, mediante el uso de la anotación @RunWith en nuestra JUnit38Runner personalizado.

Cuando intentamos ejecutar en Ant, sin embargo, obliga a las pruebas individuales a ejecutarse como junit.framework.TestSuite o envueltas en un JUnit4TestAdapter, que ignoran @RunWith las anotaciones bajo JUnit4. Para empeorar las cosas, nuestras suites existentes son anuladas explícitamente por Ant, que llama directamente a los métodos suite(), en lugar de delegar en JUnit.

He intentado extender desde la hormiga JUnitTestRunner, y simplemente reemplazar el método run(), sin embargo la clase es simplemente no está escrito para la extensión.

Además de copiar todo el JUnitTestRunner y hackearlo (lo que nos abrirá hasta problemas de código frágil), ¿alguien ha tenido suerte con otros enfoques para resolver este problema?

+0

Parece que hay un par de código huele aquí. Sé que probablemente no sea la respuesta que está buscando, pero puede ser momento de refactorizar sus casos de prueba. – bakoyaro

+0

La refabricación no solucionará los problemas con Ant (envolviendo pruebas JUnit 4 en Junit 3). Con numerosas soluciones, está dando tumbos, pero creo que voy a tener que morder la bala y escribir una tarea JUnit4 Ant uno de estos días. – Matt

+0

Quizás haya una respuesta en [Actualizando a JUnit4 y manteniendo las pruebas heredadas JUnit 3 y suites de pruebas ejecutándolas juntas] [1]? [1]: http: //stackoverflow.com/questions/1861875/upgrading-to-junit4-and-keeping-legacy-junit-3-tests-and-test-suites-by-running –

Respuesta

0

Hemos tenido un problema similar, y aunque no es tan limpia como se ejecuta la tarea junit, no es terriblemente difícil de resolver. Creamos una clase con un main() que simplemente invoca el Junit4Runner. Agrega RunListener que intenta escribir el resultado del informe junit en XML. La idea era que el formato de datos tiene muchas menos probabilidades de cambiar que el del corredor, por lo que es menos frágil.

He despojado a cabo una buena cantidad de código específica del entorno, pero esta es la idea básica. Nuestro objetivo en test hormiga se ve así:

<java failonerror="yes" 
      fork="true" 
      classname="com.mycompany.test.Junit4Runner"> 
     <classpath> 
      <pathelement location="${basedir}/bin" /> 
      <pathelement path="${ProjectTest.classpath}" /> 
      <!-- above classpath includes junit-4.8.1.jar --> 
     </classpath> 
     <arg value="${test.class}" /> 
    </java> 

Usted puede ver el código de la clase corredor here. No depende de nada fuera de Java 6 SE y Junit 4.8, y puede ser compatible con Java 5 SE.

+0

Parece que podría funcionar, aunque te pediría que cambiases el p_ y el m_ antes de comprometerte en mi tienda ;-). Desafortunadamente no tengo tiempo para probarlo ahora, pero lo marcaré como resuelto por ahora. – Matt

+0

El p_ y m_ es una elección de estilo en el nuestro, creo que me he acostumbrado :) – ahawtho

Cuestiones relacionadas