2009-10-29 13 views
8

Tenemos un montón de pruebas de integración escritas usando JUnit , aunque ahora las estamos ejecutando con 4.4. Algunos de ellos necesitan un método tearDown que se ejecute después de que se completen todas las pruebas de la clase (para liberar algunos recursos comunes).desmontaje de clase en junit 3?

Veo que esto se puede hacer en junit 4 con @AfterClass (org.junit). Sin embargo, mezclar esto en las pruebas junit 3 existentes que extienden TestCase (junit.framework. *) No parece funcionar. [Por cierto, ¿hay una herramienta de migración? La pregunta 264680 indicó que no había uno hace un año.]

He visto mencionar el uso de junit.extensions.TestSetup para este tipo de cosas. Mi breve prueba de esto no pareció funcionar. ¿Algún ejemplo?

+0

Asumamos que no tenemos tiempo actualmente para convertir y verificar todas las pruebas manualmente (y capacitar a todos los desarrolladores involucrados en el uso de la JUnit 4 anotaciones), pero solo quiero abordar las pocas clases que requieren un equivalente de AfterClass en junit 3. –

Respuesta

18

Encontré la respuesta a mi propia pregunta :) Lo había intentado brevemente antes de publicar mi pregunta, pero no funcionaba para mí. Pero me doy cuenta ahora de que es porque nuestro marco de prueba está invocando junit de manera diferente a la predeterminada, por lo que no estaba llamando al método "suite" que se necesita en la siguiente solución. En Eclipse, si utilizo el corredor junit incluido para ejecutar directamente una prueba/prueba, funciona bien.

Una forma de hacer esta configuración/desmontaje una vez por clase en junit 3 es usar TestSuite. He aquí un ejemplo de junit.org:

Is there a way to make setUp() run only once?

public static Test suite() { 
    return new TestSetup(new TestSuite(YourTestClass.class)) { 

     protected void setUp() throws Exception { 
      System.out.println(" Global setUp "); 
     } 
     protected void tearDown() throws Exception { 
      System.out.println(" Global tearDown "); 
     } 
    }; 
} 
+0

¿ejecutó esto en Android? Tengo exactamente el mismo código, pero obtengo una excepción ClassNotFound. ¿Ya se ha enfrentado a esto? ¿YourTestClass extiende TestCase? –

+0

Podría ejecutar mi prueba con este código ahora, pero parece que no se llama al método suite(). ¿Qué hiciste para hacer esa llamada a este método? Pensé que se llamaría automáticamente –

+0

@FelipeMosso si le dices a JUnit (o tu IDE) que ejecute una única clase de prueba estilo JUnit3 y esa clase tiene un método público estático 'suite()' que devuelve un 'Test' (o subclase) de prueba), luego se llamará al método 'suite()' para generar el conjunto. Pero si crea suites manualmente, debe asegurarse de que se usa el método suite() utilizando posiblemente el constructor 'TestSuite' que toma una clase. – NamshubWriter

3

En JUnit 4, su clase de prueba no necesita extender TestCase. En su lugar, debe asegurarse de que el nombre de su clase de prueba coincida con *Test y que cada método de prueba esté anotado con @Test. ¿Has intentado hacer estos cambios y luego has agregado la anotación @AfterClass al método relevante?

Existen anotaciones para reemplazar la mayoría de las funciones que actualmente está utilizando en el TestCase.

+0

Paralelamente a tratar de obtener un desmontaje para toda la clase, también estoy tratando de convertir una clase a anotaciones junit 4. Todavía no tengo mucha suerte ya que Eclipse/command-line piensa que no tengo ninguna prueba para ejecutar. –

+0

He actualizado mi respuesta, el consejo que di anteriormente era completamente incorrecto y merezco haber sido votado negativamente. Por favor, siga las instrucciones de arriba y vuelva a intentarlo. –

Cuestiones relacionadas