Udfordring: Enhedstest
Opgave
Vi nærmer os afslutningen på dette kursus, og for at færdiggøre vores applikation foreslås det, at du færdiggør alle unit tests for controller- og service-lagene.
Opgaveforklaring
Det er nødvendigt at teste alle metoder i både controller- og service-lagene, som endnu ikke har tests skrevet for sig. Til dette anbefales brug af JUnit sammen med Mockito-biblioteket.
Retningslinjer for testskrivning med JUnit
Nøglemetoder, der kan være nyttige:
assertNotNull(result): Sikrer, at resultatet af et metodekald ikke er null, hvilket bekræfter, at operationen var vellykket;
assertEquals(expected, actual): Sammenligner den forventede værdi med den faktiske værdi for at verificere, at de korrekte data returneres;
assertTrue(condition): Kontrollerer, at en betingelse er sand, for eksempel at en liste af bøger er tom, hvis der ingen poster er i databasen;
verify(mock).methodCall(): Verificerer, at en specifik metode på et mock-objekt blev kaldt med de forventede parametre, hvilket validerer interaktionen mellem komponenter;
when(mock.methodCall()).thenReturn(value): Konfigurerer en mock til at returnere en bestemt værdi, når en metode kaldes, hvilket simulerer afhængigheder i dine tests.
Controller-testning
Her er der allerede skrevet tests for metoderne findAllBooks, findByAuthor, createBook og updateBook. Du skal skrive tests for den resterende metode. Nedenfor er nogle tips til at hjælpe dig med at implementere testen for denne metode.
deleteBooks(String id)
For metoden deleteBooks(String id) skal du verificere, at delete-metoden bliver kaldt med det korrekte id, og teste fejlhåndtering ved forsøg på at slette en ikke-eksisterende bog. For et vellykket svar skal du kun kontrollere status; for fejl skal du verificere både status og fejlmeddelelse.
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); }
For controlleren skal du skrive to tests for denne metode: én for vellykket sletning og en anden for når en 404 status returneres.
Bemærk at servicemetoden, som vi vil mocke, ikke returnerer noget, ligesom controlleren.
Du kan bruge doNothing()-metoden til at stubbe en void-metode, så der ikke udføres nogen handlinger ved kald. Syntaksen er:
doNothing().when(someService).someVoidMethod();
Når du skal håndtere et scenarie, hvor en undtagelse kastes, skal du bruge doThrow(). Denne metode i Mockito simulerer kast af en undtagelse fra en void-metode. Syntaksen er:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Servicetest
deleteBook(String id)
Metoden deleteBook(String id) kræver validering for at sikre, at bogsletningsmetoden kaldes med det korrekte id. Derudover er det vigtigt at teste, hvordan metoden håndterer situationen, når en bog med det angivne id ikke findes.
Du skal implementere to tests: én hvor entiteten findes via id og slettes, og en anden hvor en undtagelse kastes.
Hvad hvis du ikke kan skrive tests?
Det er fuldstændig i orden, hvis du ikke forstod emnet ved første forsøg; du kan have brug for at læse om testkoncepterne igen. Jeg anbefaler også at gennemgå løsningen til denne opgave.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.45
Udfordring: Enhedstest
Stryg for at vise menuen
Opgave
Vi nærmer os afslutningen på dette kursus, og for at færdiggøre vores applikation foreslås det, at du færdiggør alle unit tests for controller- og service-lagene.
Opgaveforklaring
Det er nødvendigt at teste alle metoder i både controller- og service-lagene, som endnu ikke har tests skrevet for sig. Til dette anbefales brug af JUnit sammen med Mockito-biblioteket.
Retningslinjer for testskrivning med JUnit
Nøglemetoder, der kan være nyttige:
assertNotNull(result): Sikrer, at resultatet af et metodekald ikke er null, hvilket bekræfter, at operationen var vellykket;
assertEquals(expected, actual): Sammenligner den forventede værdi med den faktiske værdi for at verificere, at de korrekte data returneres;
assertTrue(condition): Kontrollerer, at en betingelse er sand, for eksempel at en liste af bøger er tom, hvis der ingen poster er i databasen;
verify(mock).methodCall(): Verificerer, at en specifik metode på et mock-objekt blev kaldt med de forventede parametre, hvilket validerer interaktionen mellem komponenter;
when(mock.methodCall()).thenReturn(value): Konfigurerer en mock til at returnere en bestemt værdi, når en metode kaldes, hvilket simulerer afhængigheder i dine tests.
Controller-testning
Her er der allerede skrevet tests for metoderne findAllBooks, findByAuthor, createBook og updateBook. Du skal skrive tests for den resterende metode. Nedenfor er nogle tips til at hjælpe dig med at implementere testen for denne metode.
deleteBooks(String id)
For metoden deleteBooks(String id) skal du verificere, at delete-metoden bliver kaldt med det korrekte id, og teste fejlhåndtering ved forsøg på at slette en ikke-eksisterende bog. For et vellykket svar skal du kun kontrollere status; for fejl skal du verificere både status og fejlmeddelelse.
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); }
For controlleren skal du skrive to tests for denne metode: én for vellykket sletning og en anden for når en 404 status returneres.
Bemærk at servicemetoden, som vi vil mocke, ikke returnerer noget, ligesom controlleren.
Du kan bruge doNothing()-metoden til at stubbe en void-metode, så der ikke udføres nogen handlinger ved kald. Syntaksen er:
doNothing().when(someService).someVoidMethod();
Når du skal håndtere et scenarie, hvor en undtagelse kastes, skal du bruge doThrow(). Denne metode i Mockito simulerer kast af en undtagelse fra en void-metode. Syntaksen er:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Servicetest
deleteBook(String id)
Metoden deleteBook(String id) kræver validering for at sikre, at bogsletningsmetoden kaldes med det korrekte id. Derudover er det vigtigt at teste, hvordan metoden håndterer situationen, når en bog med det angivne id ikke findes.
Du skal implementere to tests: én hvor entiteten findes via id og slettes, og en anden hvor en undtagelse kastes.
Hvad hvis du ikke kan skrive tests?
Det er fuldstændig i orden, hvis du ikke forstod emnet ved første forsøg; du kan have brug for at læse om testkoncepterne igen. Jeg anbefaler også at gennemgå løsningen til denne opgave.
Tak for dine kommentarer!