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

bookHerausforderung: 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

Es ist erforderlich, alle Methoden in den Controller- und Service-Schichten zu testen, für die noch keine Tests geschrieben wurden. Hierfür wird die Verwendung von JUnit zusammen mit der Bibliothek Mockito empfohlen.

Richtlinien zum Schreiben von Tests mit JUnit

Hier sind einige wichtige Methoden, die nützlich sein können:

assertNotNull(result): Stellt sicher, dass das Ergebnis eines Methodenaufrufs nicht null ist, was auf einen erfolgreichen Ablauf hinweist;

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): Prüft, ob eine Bedingung erfüllt ist, beispielsweise ob eine Liste von Büchern leer ist, wenn keine Einträge in der Datenbank vorhanden sind;

verify(mock).methodCall(): Überprüft, ob eine bestimmte Methode eines Mock-Objekts mit den erwarteten Parametern aufgerufen wurde, um die Interaktion zwischen Komponenten zu validieren;

when(mock.methodCall()).thenReturn(value): Konfiguriert ein Mock-Objekt so, dass bei einem Methodenaufruf ein bestimmter Wert zurückgegeben wird, um Abhängigkeiten in den Tests zu simulieren.

Controller-Tests

Für die Methoden findAllBooks, findByAuthor, createBook und updateBook wurden bereits Tests geschrieben. Es ist erforderlich, Tests für die verbleibende Methode zu verfassen. Nachfolgend finden Sie einige Hinweise, die bei der Implementierung des Tests für diese Methode unterstützen.

deleteBooks(String id)

Für die Methode deleteBooks(String id) ist zu überprüfen, ob die Löschmethode mit der korrekten id aufgerufen wird, sowie das Fehlerhandling beim Versuch, ein nicht vorhandenes Buch zu löschen. Bei einer erfolgreichen Antwort ist ausschließlich der Status zu prüfen; bei Fehlern sind sowohl der Status als auch die Fehlermeldung zu verifizieren.

BookService.java

BookService.java

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 zwei Tests für diese Methode geschrieben werden: einer für das erfolgreiche Löschen und ein weiterer für den Fall, dass ein 404 status zurückgegeben wird.

Beachten Sie, dass die Service-Methode, die wir mocken, nichts zurückgibt, ebenso wie der Controller.

Die Methode doNothing() kann verwendet werden, um eine void-Methode zu stubben, sodass keine Aktionen bei deren Aufruf ausgeführt werden. Die Syntax lautet:

doNothing().when(someService).someVoidMethod();

Wenn ein Szenario behandelt werden muss, in dem eine Exception ausgelöst wird, verwenden Sie doThrow(). Diese Methode in Mockito simuliert das Werfen einer Exception aus einer void-Methode. Die Syntax lautet:

doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");

Service-Tests

deleteBook(String id)

Die Methode deleteBook(String id) 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.

Es müssen zwei Tests implementiert werden: einer, bei dem die Entität anhand der id gefunden und gelöscht wird, und ein weiterer, bei dem eine Exception ausgelöst wird.

Was tun, wenn Sie keine Tests schreiben können?

Es ist vollkommen in Ordnung, wenn Sie das Thema beim ersten Versuch nicht verstanden haben; möglicherweise müssen Sie die Testkonzepte erneut durchlesen. Es wird außerdem empfohlen, 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

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

Can you explain how to write a test for the deleteBook method in the service layer?

What should I focus on when testing the controller's deleteBooks method?

Can you clarify how to use doThrow and doNothing in Mockito for these tests?

Awesome!

Completion rate improved to 3.45

bookHerausforderung: Unit Testing

Swipe um das Menü anzuzeigen

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

Es ist erforderlich, alle Methoden in den Controller- und Service-Schichten zu testen, für die noch keine Tests geschrieben wurden. Hierfür wird die Verwendung von JUnit zusammen mit der Bibliothek Mockito empfohlen.

Richtlinien zum Schreiben von Tests mit JUnit

Hier sind einige wichtige Methoden, die nützlich sein können:

assertNotNull(result): Stellt sicher, dass das Ergebnis eines Methodenaufrufs nicht null ist, was auf einen erfolgreichen Ablauf hinweist;

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): Prüft, ob eine Bedingung erfüllt ist, beispielsweise ob eine Liste von Büchern leer ist, wenn keine Einträge in der Datenbank vorhanden sind;

verify(mock).methodCall(): Überprüft, ob eine bestimmte Methode eines Mock-Objekts mit den erwarteten Parametern aufgerufen wurde, um die Interaktion zwischen Komponenten zu validieren;

when(mock.methodCall()).thenReturn(value): Konfiguriert ein Mock-Objekt so, dass bei einem Methodenaufruf ein bestimmter Wert zurückgegeben wird, um Abhängigkeiten in den Tests zu simulieren.

Controller-Tests

Für die Methoden findAllBooks, findByAuthor, createBook und updateBook wurden bereits Tests geschrieben. Es ist erforderlich, Tests für die verbleibende Methode zu verfassen. Nachfolgend finden Sie einige Hinweise, die bei der Implementierung des Tests für diese Methode unterstützen.

deleteBooks(String id)

Für die Methode deleteBooks(String id) ist zu überprüfen, ob die Löschmethode mit der korrekten id aufgerufen wird, sowie das Fehlerhandling beim Versuch, ein nicht vorhandenes Buch zu löschen. Bei einer erfolgreichen Antwort ist ausschließlich der Status zu prüfen; bei Fehlern sind sowohl der Status als auch die Fehlermeldung zu verifizieren.

BookService.java

BookService.java

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 zwei Tests für diese Methode geschrieben werden: einer für das erfolgreiche Löschen und ein weiterer für den Fall, dass ein 404 status zurückgegeben wird.

Beachten Sie, dass die Service-Methode, die wir mocken, nichts zurückgibt, ebenso wie der Controller.

Die Methode doNothing() kann verwendet werden, um eine void-Methode zu stubben, sodass keine Aktionen bei deren Aufruf ausgeführt werden. Die Syntax lautet:

doNothing().when(someService).someVoidMethod();

Wenn ein Szenario behandelt werden muss, in dem eine Exception ausgelöst wird, verwenden Sie doThrow(). Diese Methode in Mockito simuliert das Werfen einer Exception aus einer void-Methode. Die Syntax lautet:

doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");

Service-Tests

deleteBook(String id)

Die Methode deleteBook(String id) 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.

Es müssen zwei Tests implementiert werden: einer, bei dem die Entität anhand der id gefunden und gelöscht wird, und ein weiterer, bei dem eine Exception ausgelöst wird.

Was tun, wenn Sie keine Tests schreiben können?

Es ist vollkommen in Ordnung, wenn Sie das Thema beim ersten Versuch nicht verstanden haben; möglicherweise müssen Sie die Testkonzepte erneut durchlesen. Es wird außerdem empfohlen, 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
some-alt