Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Unit-Testing | Testen von Backend-Anwendungen
Spring Boot Backend
course content

Kursinhalt

Spring Boot Backend

Spring Boot Backend

1. Grundlagen der Backend-Entwicklung
2. Spring Boot Grundlagen
3. RESTful API
4. Arbeiten mit Datenbanken
5. Testen von Backend-Anwendungen

book
Herausforderung: Unit-Testing

Aufgabe

Wir nähern uns dem Ende dieses Kurses, und um unsere Anwendung abzuschließen, schlage ich vor, dass Sie alle Unit-Tests für die Controller- und Service-Schichten fertigstellen.

Aufgabenbeschreibung

Sie müssen alle Methoden in den Controller- und Service-Schichten testen, für die noch keine Tests geschrieben wurden. Dafür empfehle ich die Verwendung von JUnit zusammen mit der Mockito Bibliothek.

Richtlinien zum Schreiben von Tests mit JUnit

Hier sind einige wichtige Methoden, die Sie nützlich finden werden:

assertNotNull(result): Stellt sicher, dass das Ergebnis eines Methodenaufrufs nicht null ist, was bestätigt, dass die Operation erfolgreich war;

assertEquals(expected, actual): Vergleicht den erwarteten Wert mit dem tatsächlichen Wert, um zu überprüfen, ob die korrekten Daten zurückgegeben werden;

assertTrue(condition): Überprüft, dass eine Bedingung wahr ist, zum Beispiel, um sicherzustellen, dass eine Liste von Büchern leer ist, wenn es keine Einträge in der Datenbank gibt;

verify(mock).methodCall(): Überprüft, dass eine bestimmte Methode auf einem Mock-Objekt mit den erwarteten Parametern aufgerufen wurde, was die Interaktion zwischen Komponenten validiert;

when(mock.methodCall()).thenReturn(value): Konfiguriert einen Mock, um einen bestimmten Wert zurückzugeben, wenn eine Methode aufgerufen wird, und simuliert Abhängigkeiten in Ihren Tests.

Controller-Tests

Hier wurden bereits Tests für die Methoden findAllBooks, findByAuthor, createBook und updateBook geschrieben. Sie müssen Tests für die verbleibende Methode schreiben. Unten sind einige Tipps, die Ihnen helfen, den Test für diese Methode zu implementieren.

deleteBooks(String id)

Für die Methode deleteBooks(String id) müssen Sie überprüfen, dass die Löschmethode mit der korrekten id aufgerufen wird und die Fehlerbehandlung testen, wenn versucht wird, ein nicht vorhandenes Buch zu löschen. Für eine erfolgreiche Antwort überprüfen Sie nur den Status; bei Fehlern überprüfen Sie sowohl den Status als auch die Fehlermeldung.

java

BookService

copy
1234567
@Transactional public void deleteBook(String id) { if(!bookRepository.existsById(id)) { throw new ApiException("Not found by id: " + id, HttpStatus.NOT_FOUND); } bookRepository.deleteById(id); }

Für den Controller müssen Sie zwei Tests für diese Methode schreiben: einen für die erfolgreiche Löschung und einen weiteren für den Fall, dass ein 404 status zurückgegeben wird.

Beachten Sie, dass die Servicemethode, die wir mocken, nichts zurückgibt, genau wie der Controller.

Sie können die doNothing() Methode verwenden, um eine void Methode zu stubben, sodass keine Aktionen bei deren Aufruf ausgeführt werden. Die Syntax ist:

Wenn Sie ein Szenario behandeln müssen, in dem eine Ausnahme ausgelöst wird, verwenden Sie doThrow(). Diese Methode in Mockito simuliert das Auslösen einer Ausnahme von einer void Methode. Die Syntax ist:

Service-Tests

deleteBook(String id)

Die deleteBook(String id) Methode erfordert eine Validierung, um sicherzustellen, dass die Buchlöschmethode mit der korrekten id aufgerufen wird. Zusätzlich ist es wichtig zu testen, wie die Methode mit der Situation umgeht, wenn ein Buch mit der angegebenen id nicht gefunden wird.

Sie müssen zwei Tests implementieren: einen, bei dem die Entität durch id gefunden und gelöscht wird, und einen anderen, bei dem eine Ausnahme ausgelöst wird.

Was, wenn Sie keine Tests schreiben können?

Es ist völlig in Ordnung, wenn Sie das Thema beim ersten Versuch nicht verstanden haben; möglicherweise müssen Sie die Testkonzepte erneut durchlesen. Ich empfehle auch, die Lösung zu dieser Aufgabe zu überprüfen.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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