2011-02-24 14 views
6

Cuando ejecuto una prueba con la anotación @Test (timeout = 3000) y agota el tiempo de espera, se cancela la prueba inmediatamente y no se llama a mi método tearDown con @After.Junit4 - Limpieza en tiempo de espera de prueba

¿Cuál sería la forma de limpiar en tal escenario?

EDIT: Mi prueba invoca puntos finales de recursos utilizando jax-rs a través del cable y la prueba se agota en el medio de una solicitud http. Este es el caso, estoy bastante seguro de que @After no se invoca

Respuesta

2

Estrictamente hablando, no mata la prueba, falla. Lo que aparentemente significa que se ejecutará el método anotado con @After.

El código siguiente funciona como el encanto para mí.

@Test(timeout=1) 
public void testTimeout() { 
    try { 
     Thread.sleep(10); 
    } catch (InterruptedException ex) {} 
} 

@After 
public void after() { 
    System.out.println("@After is invoked, indeed."); 
} 

de salida es,

Testsuite: javaapplication1.MainTest 
After is invoked, indeed. 
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.054 sec 
+0

Sí, estoy usando @After y en tiempo de espera que no parece ser llamado. – Prasanna

+0

@Prasanna: Acabo de actualizar mi publicación para incluir mi prueba. –

1

he tenido algunos problemas con el atributo de tiempo de espera, también. Tal vez esto te ayude a encontrar cuatro problemas ...

En mi caso, la confusión fue causada por el hecho de que el código de prueba en un método anotado con @Test (timeout = ...) se ejecuta en un hilo separado. Por lo tanto, algunas cosas de ThreadLocal a las que accedí durante la prueba no se pudieron limpiar en el método @ After.

+0

Malo, debería haber dado más información. Mi prueba invoca un montón de puntos finales de recursos utilizando jax-rs a través del cable, por lo que no estoy seguro de qué sucede cuando una prueba expira en medio de la solicitud http, creo que acaba con todos los hilos generados por la prueba. ¿Estás hablando algo similar? – Prasanna

1
@Rule 
public Timeout to = new Timeout(300000); 

Esto funciona desde JUnit 4.7.