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
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
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.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
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
Herausforderung: 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
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.
Danke für Ihr Feedback!