Wie kann ich JUnit4 idiomatisch verwenden, um zu testen, dass ein Code eine Ausnahme auslöst?
Während ich sicherlich etwas wie dieses tun kann:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Ich erinnere mich, dass es eine Annotation oder ein Assert.xyz oder etwas gibt, das weit weniger umständlich und weit mehr im Geiste von JUnit für diese Art von Situationen ist.
JUnit 4" bietet hierfür Unterstützung:
@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
ArrayList emptyList = new ArrayList();
Object o = emptyList.get(0);
}
Referenz :
Wie wäre es damit: Fangen Sie eine sehr allgemeine Ausnahme, stellen Sie sicher, dass sie aus dem Catch-Block herauskommt, und behaupten Sie dann, dass die Klasse der Ausnahme das ist, was Sie erwarten. Diese Behauptung wird fehlschlagen, wenn a) die Ausnahme vom falschen Typ ist (z.B. wenn Sie stattdessen einen Null-Zeiger erhalten haben) und b) die Ausnahme nie ausgelöst wurde.
public void testFooThrowsIndexOutOfBoundsException() {
Throwable e = null;
try {
foo.doStuff();
} catch (Throwable ex) {
e = ex;
}
assertTrue(e instanceof IndexOutOfBoundsException);
}