Comment puis-je utiliser JUnit4 de manière idiomatique pour tester qu'un certain code lève une exception ?
Bien que je puisse certainement faire quelque chose comme ça :
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Je me souviens qu'il existe une annotation ou un Assert.xyz ou quelque chose qui est beaucoup moins maladroit et beaucoup plus dans l'esprit de JUnit pour ce genre de situations.
JUnit 4
a un support pour cela :
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Référence :
Que pensez-vous de ceci : Attrapez une exception très générale, assurez-vous qu'elle sorte du bloc catch, puis affirmez que la classe de l'exception est celle que vous attendez. Cette affirmation échouera si a) l'exception n'est pas du bon type (par exemple, si vous obtenez un pointeur nul à la place) et b) l'exception n'a jamais été lancée.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}
JUnit a un support intégré pour cela, avec un attribut ["expected"][1].