¿Cómo puedo usar JUnit4 de forma idiomática para probar que algún código lanza una excepción?
Mientras que ciertamente puedo hacer algo como esto:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Recuerdo que hay una anotación o un Assert.xyz o algo que es mucho menos kludgy y mucho más en el espíritu de JUnit para este tipo de situaciones.
El programa JUnit 4
tiene soporte para esto:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Referencia :
¿Qué tal esto? Captura una excepción muy general, asegúrate de que sale del bloque de captura, y luego afirma que la clase de la excepción es la que esperas que sea. Esta afirmación fallará si a) la excepción es de un tipo incorrecto (por ejemplo, si se obtiene un puntero nulo en su lugar) y b) la excepción nunca fue lanzada.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}