Eine Ausnahme wird in JUnit 4 und 5 ausgelöst

In JUnit 4 und 5 wird eine Ausnahme ausgelöst

1. Einführung

In diesem kurzen Tutorial erfahren Sie, wie Sie mithilfe der JUnit-Bibliothek testen können, ob eine Ausnahme ausgelöst wurde.

Natürlich werden wir sicherstellen, dass sowohl die Versionen JUnit 4 als auch JUnit 5 abgedeckt werden.

Weitere Lektüre:

Die Reihenfolge der Tests in JUnit

Erfahren Sie, wie Sie JUnit-Tests in einer benutzerdefinierten Reihenfolge ausführen.

Read more

Zusicherungen in JUnit 4 und JUnit 5

Ein Blick auf Behauptungen in JUnit 4 und 5.

Read more

2. JUnit 5

Die Jupiter-Assertions-API von JUnit 5 führt dieassertThrows-Methode zum Assertieren von Ausnahmen ein.

Dies nimmt den Typ der erwarteten Ausnahme und eineExecutable-Funktionsschnittstelle an, über die wir den zu testenden Code über einen Lambda-Ausdruck übergeben können:

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    String test = null;
    assertThrows(NullPointerException.class, () -> {
        test.length();
    });
}

Hierbei ist zu beachten, dassthis assertion is satisfied when the enclosed code throws an exception of type NullPointerException or any of its derived types.

Das heißt, wenn wirException als erwarteten Ausnahmetyp übergeben, wird die Assertion durch jede ausgelöste Ausnahme erfolgreich ausgeführt, daException der Supertyp für alle Ausnahmen ist.

Wenn wir den obigen Test ändern, um einRuntimeException, zu erwarten, besteht dies auch:

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceds() {
    String test = null;
    assertThrows(RuntimeException.class, () -> {
        test.length();
    });
}

DieassertThrows()-Methode ermöglicht eine feinkörnigere Steuerung der Logik für die Ausnahmebestätigung, da wir __ um bestimmte Teile des Codes verwenden können.

3. JUnit 4

Bei Verwendung von JUnit 4 können wir einfachuse the expected attribute of the @Test annotation deklarieren, dass eine Ausnahme irgendwo in der mit Anmerkungen versehenen Testmethode ausgelöst wird.

Infolgedessen schlägt der Test fehl, wenn die angegebene Ausnahme beim Ausführen des Tests nicht ausgelöst wird, und besteht, wenn er ausgelöst wird:

@Test(expected = NullPointerException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
    String test = null;
    test.length();
}

In diesem Beispiel haben wir erklärt, dass wir erwarten, dass unser Testcode zuNullPointerException. führt

Dies ist ausreichend, wenn wir nur behaupten möchten, dass eine Ausnahme ausgelöst wird.

Wenn wir einige andere Eigenschaften der Ausnahme überprüfen müssen, können wir dieExpectedException-Regel verwenden.

Sehen wir uns ein Beispiel für die Überprüfung dermessage-Eigenschaft einer Ausnahme an:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void whenExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NumberFormatException.class);
    exceptionRule.expectMessage("For input string");
    Integer.parseInt("1a");
}

Im obigen Beispiel deklarieren wir zuerst dieExpectedException-Regel. In unserem Test behaupten wir dann, dass der Code, der versucht, einenInteger-Wert zu analysieren, zu einemNumberFormatException mit der Meldung "Für Eingabezeichenfolge" führt.

4. Fazit

In diesem Artikel haben wir uns auf die Geltendmachung von Ausnahmen sowohl mit JUnit 4 als auch mit JUnit 5 konzentriert und diese behandelt.

Der vollständige Quellcode für die Beispiele istover on GitHub verfügbar.