Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Ausnahmen Testen | Ausnahmen
Java JUnit Bibliothek. Arten von Tests
course content

Kursinhalt

Java JUnit Bibliothek. Arten von Tests

Java JUnit Bibliothek. Arten von Tests

1. Testen in der Entwicklung
2. Unit Tests
3. Ausnahmen

book
Ausnahmen Testen

Das Werfen von Ausnahmen erfordert auch Unit-Tests. In JUnit 5 wurden Methoden zum Testen solcher Ausnahmen hinzugefügt. Die dahinterstehende Logik ist einfach:

"wenn erwartet wird, dass eine Ausnahme geworfen wird, aber nicht, dann funktioniert die Methode nicht korrekt und der Test schlägt fehl."

Umgekehrt, "wenn erwartet wird, dass keine Ausnahme geworfen wird, aber die Methode eine wirft, dann funktioniert die Methode nicht korrekt und der Test schlägt ebenfalls fehl."

Betrachten wir diese zwei Assertions, die verwendet werden, um das Werfen von Ausnahmen zu testen: assertThrows() und assertDoesNotThrow():

`assertThrows()`

Wie der Name schon sagt, wird mit dieser Methode getestet, ob eine Ausnahme ausgelöst wird, wobei erwartet wird, dass eine Ausnahme ausgelöst wird.
Dies geschieht mit einem Lambda-Ausdruck. Zum Beispiel testen wir das Auslösen einer NullPointerException, wenn die Methode auf einem null-String verwendet wird:

Wie Sie sehen können, erstellen wir eine Variable vom Typ String mit dem Wert null und testen dann das Auslösen einer Ausnahme, wenn die Methode .length() auf dieser Variablen aufgerufen wird. Wenn Sie Methoden auf einem String mit einem null-Wert aufrufen, wird eine NullPointerException ausgelöst.
In der assertThrows-Assertion geben wir die Klasse der Ausnahme an, die wir erwarten, in unserem Fall NullPointerException.class. Dann verwenden wir einen Lambda-Ausdruck, um anzugeben, unter welcher Bedingung diese Ausnahme ausgelöst werden sollte. Die Syntax ist einfach:

Mit anderen Worten:

Wir erwarten, dass eine NullPointerException ausgelöst wird, wenn die .length()-Methode auf dem str-Objekt aufgerufen wird, dessen Wert null ist.

Es ist auch erwähnenswert, dass die assertThrows()-Assertion die gefangene und getestete Ausnahme zurückgibt. Das bedeutet, dass wir eine Variable exception mit dieser Methode initialisieren und später verwenden können.
Zum Beispiel:

Beste Praktiken

  1. Testen Sie eine Ausnahme pro Test: Jede Testmethode sollte idealerweise nur eine spezifische Ausnahme testen. Dies macht Ihre Tests wartbarer und ihre Absicht klarer;

  2. Testen Sie Ausnahmedetails: Wann immer möglich, testen Sie nicht nur den Typ der Ausnahme, sondern auch deren Nachricht oder andere Eigenschaften. Dies stellt sicher, dass die richtige Ausnahme aus dem richtigen Grund ausgelöst wird;

  3. Verwenden Sie die neuesten Funktionen: Wenn Sie JUnit 5 verwenden, bevorzugen Sie den assertThrows-Ansatz wegen seiner Flexibilität und Klarheit. Er ermöglicht nicht nur die Überprüfung des Typs der ausgelösten Ausnahme, sondern auch weitere Assertions am Ausnahmeobjekt.

`assertDoesNotThrow()`

Manchmal müssen wir eine Methode testen, die eine Ausnahme auslöst, aber in unserem Fall sollte sie das nicht. Dies wird mit der 'assertDoesNotThrow()'-Assertion durchgeführt. Der Algorithmus hier ist derselbe wie bei der 'assertThrows()'-Assertion, außer dass wir die Ausnahme nicht angeben, die wir erwarten zu erhalten ( weil wir sie nicht erwarten ).

Die Syntax sieht folgendermaßen aus:

Wie Sie in diesem Test sehen können, überprüfen wir, dass die Methode .length() keine Ausnahme wirft, wenn sie auf einem nicht-null-Objekt aufgerufen wird. Danach verifizieren wir, dass die Methode ihre Funktion korrekt ausführt und das richtige Ergebnis zurückgibt. Wie Sie sehen können, verwenden wir keine Ausnahme-Klasse in den Parametern, da wir keine Ausnahmen erwarten.

Alles sieht einfach aus. Im nächsten Kapitel sehen wir, wie Sie solche Tests selbst schreiben können!

1. Was ist der Zweck von assertThrows() in JUnit 5?

2. Wie wird ein Lambda-Ausdruck in Verbindung mit assertThrows() verwendet?

3. Welche Methode kann verwendet werden, um zu testen, dass keine Ausnahmen von einer Methode geworfen werden?

4. Was gibt assertThrows() in JUnit 5 zurück?

5. Warum wird empfohlen, pro Testmethode nur eine Ausnahme zu testen?

6. Warum ist es im Kontext des Ausnahme-Tests wichtig, Details der Ausnahme wie die Nachricht zu testen?

Was ist der Zweck von `assertThrows()` in JUnit 5?

Was ist der Zweck von assertThrows() in JUnit 5?

Wählen Sie die richtige Antwort aus

Wie wird ein **Lambda-Ausdruck** in Verbindung mit `assertThrows()` verwendet?

Wie wird ein Lambda-Ausdruck in Verbindung mit assertThrows() verwendet?

Wählen Sie die richtige Antwort aus

Welche Methode kann verwendet werden, um zu testen, dass keine Ausnahmen von einer Methode geworfen werden?

Welche Methode kann verwendet werden, um zu testen, dass keine Ausnahmen von einer Methode geworfen werden?

Wählen Sie die richtige Antwort aus

Was gibt `assertThrows()` in JUnit 5 zurück?

Was gibt assertThrows() in JUnit 5 zurück?

Wählen Sie die richtige Antwort aus

Warum wird empfohlen, pro Testmethode nur eine Ausnahme zu testen?

Warum wird empfohlen, pro Testmethode nur eine Ausnahme zu testen?

Wählen Sie die richtige Antwort aus

Warum ist es im Kontext des Ausnahme-Tests wichtig, Details der Ausnahme wie die Nachricht zu testen?

Warum ist es im Kontext des Ausnahme-Tests wichtig, Details der Ausnahme wie die Nachricht zu testen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6
We're sorry to hear that something went wrong. What happened?
some-alt