java - pruebas - La anotación esperada JUnit @Test no funciona
test en java (8)
Acabo de probar esto en JUnit4: este trabajo DO, la prueba se completa con éxito. Mira si es una Exception
Selector
Illegal
o tal.
Tengo la siguiente prueba:
@Test(expected = IllegalStateException.class)
public void testKey() {
int key = 1;
this.finder(key);
}
Pero JUnit informa que la prueba falla, aunque arroja, como se esperaba, una IllegalStateException
.
¿Tengo que configurar algo más para hacer esta ejecución?
Ejecuto la prueba ahora con
@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {
}
Como en esta pregunta , pero todavía no estoy obteniendo el resultado deseado.
Y cuando elimino el prefijo de test
, sigo recibiendo un error.
Tengo que decir que ejecuto estas pruebas con Eclipse, pero está configurado para usar el corredor JUnit 4.
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.
Enfrenté el mismo problema, la solución es simple "No extender la clase TestCase"
Esto me parece correcto.
Verifica tus suposiciones. ¿Estás seguro de que arroja la excepción? Si lo que dices es cierto, eliminar lo esperado de la anotación debería hacerlo fallar.
Estaría revisando el código con un depurador para ver qué está pasando. Asumiré que tienes un IDE que lo hará, como IntelliJ.
No, esta prueba JUnit debería funcionar como está; no se necesita nada más de este lado.
¿Qué te asegura que la prueba arroja una 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) realmente arroja la prueba.
Probé 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 asegúrese de que junit4 se agregue como dependance, @ (anotaciones) son una nueva función en junit 4.
Tuve el mismo problema. Cambié mis declaraciones de importación. Quite :
import org.junit.jupiter.api.Test;
import junit.framework.TestCase;
y agregado :
import org.junit.Test;
Y funcionó bien para mí.
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase
También tuve problemas con la anotación @Test (expected = ...) cuando extendí la clase TestCase en mi prueba base. El uso de @RunWith (JUnit4.class) ayudó instantáneamente (no es una solución extremadamente elegante, lo admito)