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 nutzt fail() 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.


Copyright © 2025 Thomas Smits