2011-04-05 20 views
27

Tengo la siguiente prueba:JUnit @test espera que la anotación no funciona

@Test(expected = IllegalStateException.class) 
public void testKey() { 
    int key = 1; 
    this.finder(key); 
} 

pero los informes JUnit, que la prueba falla, aunque se lanza - como se esperaba - un IllegalStateException.

¿Tengo que configurar algo más para hacer esta ejecución?


que ejecutar la prueba ahora con

@RunWith(Suite.class) 
@SuiteClasses(Test.class) 
public class TestSuite { 

} 

como en this question, pero todavía no estoy consiguiendo el resultado deseado.

Y cuando elimino el prefijo test sigo recibiendo un error.

Tengo que decir que ejecuto estas pruebas con Eclipse, pero está configurado para usar el JUnit 4 Runner.

+5

Tal vez está ejecutando inadvertidamente la prueba con JUnit 3. ¿La clase de prueba extiende TestCase? ¿Qué sucede cuando cambias el nombre del método de prueba para que ya no comience con 'test'? –

+0

Cuando el nombre de la prueba no comienza con 'test', aparece el mensaje' junit.framework.AssertionFailedError: No se encontraron pruebas en MyClass' –

+0

Y sí, la clase extiende 'TestCase'. –

Respuesta

45

El problema era que la clase en la que se anidaba la prueba era una extensión de TestCase. Como este es el estilo JUnit 3, la anotación no funcionó.

Ahora mi clase de prueba es una clase en sí misma.

2

Esto me parece correcto.

Compruebe sus suposiciones. ¿Está seguro arroja la excepción? Si lo que dices es cierto, eliminar lo esperado de la anotación debería hacerlo fallar.

Revisaré el código con un depurador para ver qué está pasando. Asumiré que tienes un IDE que lo hará, como IntelliJ.

3

No, esta prueba JUnit debería funcionar como está, no se necesita nada más en este lado.

¿Qué te asegura que la prueba arroja un IllegalStateException? ¿Es posible que quede envuelto en otra excepción de diferente tipo?

Por favor, publique el mensaje de error exacto de JUnit.

Como @duffymo sugirió, es fácil verificar qué excepción (si la hay) la prueba realmente arroja.

+0

Mensaje de JUnit: 'java.lang.IllegalStateException: ... MyErrorMessage ..' –

+0

Sí, es posible que la excepción se ajuste a otra, pero en ese caso debe afirmar el _wrapper_ y nunca el otro. – Powerslave

1

Acabo de probar esto en JUnit4: este trabajo DO, la prueba se completa con éxito. Mire si es IllegalSelectorException o similar.

6

intenté este y funciono perfectamente como esperaba.

public class SampleClassTest { 
@Test(expected = ArithmeticException.class) 
public void lost(){ 
this.lost(0); 
} 
private void lost(int i) throws ArithmeticException { 
System.out.println(3/i); 
} 
} 

también asegurar que junit4 se añade como dependencia, @ (anotaciones) son nueva característica de JUnit 4.

4

me enfrentaba mismo problema, la solución es simple "No te extiende la clase TestCase"

7
@RunWith(JUnit4.class) 
public class MyTestCaseBase extends TestCase 

También tuve problemas con @Test (expected = ...) anotación cuando extendí la clase TestCase en mi prueba base. Usar @RunWith (JUnit4.class) me ayudó al instante (no es una solución extremadamente elegante, lo admito)

+0

No debe extender TestCase con JUnit4 +. –

0

Tuve el mismo problema Acabo de cambiar mis declaraciones de importación. I Eliminado:

import org.junit.jupiter.api.Test; 

import junit.framework.TestCase; 

y ha añadido:

import org.junit.Test; 

y funcionó bien para mí.

Cuestiones relacionadas