Ausnahmen und JUnit
Wie teste ich auf Ausnahmen?
Es gibt grundsätzlich zwei Möglichkeiten auf das Auftreten einer Ausnahme zu testen
- Man macht ein
try { ... } catch { ... }
und nutztfail()
bzw.assertTrue(true)
- Man macht eine eigene Testmethode und annotiert sie mit
Assertions.assertThrows(Ausnahme.class, ...
Wichtig ist, den Fall zu berücksichtigen, dass die Ausnahme nicht geworfen wird
Beispiel: try und catch
public class TestMitTryCatch {
@Test
public void testAufAusnahme() {
try {
new String((String) null);
fail();
}
catch (NullPointerException ex) {
assertTrue(true);
}
}
}
Das Beispiel zeigt, wie man in einem JUnit-Test feststellen kann, ob eine Methode eine erwartete Ausnahme wirft. Wichtig ist hier das fail()
nach der String-Operation. Würde dieses fehlen, dann würde der Test nicht korrekt anzeigen, ob die Ausnahme geworfen wird oder nicht. Fehlt das fail()
, würde die Methode, wenn keine Ausnahme geworfen wird, einfach zurückkehren und JUnit würde den Test als erfolgreich zählen.
Beispiel: assertThrows
public class TestMitAssertThrows {
@Test
public void testAufAusnahme() {
Assertions.assertThrows(NullPointerException.class, () -> {
new String((String) null);
});
}
}
Deutlich einfacher kann man auf Ausnahmen testen, wenn man JUnit über assertThrows
mitteilt, dass eine bestimmte Ausnahme erwartet wird. Durch diesen Ansatz spart man viel Schreibarbeit, was man sofort sieht, wenn man dieses Beispiel mit dem äquivalenten vorhergehenden vergleicht.