Utfordring: Enhetstesting
Oppgave
Vi nærmer oss slutten av dette kurset, og for å fullføre vår applikasjon, foreslår jeg at du fullfører skrivingen av alle enhetstester for controller- og service-lagene.
Oppgaveforklaring
Du må teste alle metodene i både controller- og service-lagene som ennå ikke har tester skrevet for seg. Til dette anbefales bruk av JUnit sammen med Mockito-biblioteket.
Retningslinjer for testskriving med JUnit
Her er noen sentrale metoder som kan være nyttige:
assertNotNull(result): Sikrer at resultatet av et metodekall ikke er null, noe som bekrefter at operasjonen var vellykket;
assertEquals(expected, actual): Sammenligner forventet verdi med faktisk verdi for å verifisere at korrekte data returneres;
assertTrue(condition): Kontrollerer at en betingelse er sann, for eksempel at en bokliste er tom hvis det ikke finnes poster i databasen;
verify(mock).methodCall(): Verifiserer at en spesifikk metode på et mock-objekt ble kalt med forventede parametere, og validerer interaksjonen mellom komponenter;
when(mock.methodCall()).thenReturn(value): Konfigurerer en mock til å returnere en bestemt verdi når en metode kalles, og simulerer avhengigheter i testene dine.
Testing av Controller
Her er tester allerede skrevet for metodene findAllBooks, findByAuthor, createBook og updateBook. Du må skrive tester for den gjenværende metoden. Nedenfor finner du noen tips som kan hjelpe deg med å implementere testen for denne metoden.
deleteBooks(String id)
For metoden deleteBooks(String id) må du verifisere at delete-metoden kalles med riktig id og teste feilhåndtering når du prøver å slette en ikke-eksisterende bok. For et vellykket svar, sjekk kun status; for feil, verifiser både status og feilmelding.
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 kontrolleren må du skrive to tester for denne metoden: én for vellykket sletting og en annen for når en 404 status returneres.
Vær oppmerksom på at servicemetoden vi skal mocke ikke returnerer noe, akkurat som kontrolleren.
Du kan bruke doNothing()-metoden for å stubbe en void-metode, slik at ingen handlinger utføres ved kall. Syntaksen er:
doNothing().when(someService).someVoidMethod();
Når du må håndtere et scenario der et unntak kastes, bruk doThrow(). Denne metoden i Mockito simulerer at et unntak kastes fra en void-metode. Syntaksen er:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Testing av tjeneste
deleteBook(String id)
Metoden deleteBook(String id) krever validering for å sikre at bok-slettingsmetoden kalles med riktig id. I tillegg er det viktig å teste hvordan metoden håndterer situasjonen når en bok med angitt id ikke finnes.
Du må implementere to tester: én der entiteten finnes ved id og slettes, og en annen der et unntak kastes.
Hva om du ikke kan skrive tester?
Det er helt greit hvis du ikke forsto emnet på første forsøk; du kan ha behov for å lese gjennom testkonseptene på nytt. Jeg anbefaler også å gå gjennom løsningen til denne oppgaven.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 3.45
Utfordring: Enhetstesting
Sveip for å vise menyen
Oppgave
Vi nærmer oss slutten av dette kurset, og for å fullføre vår applikasjon, foreslår jeg at du fullfører skrivingen av alle enhetstester for controller- og service-lagene.
Oppgaveforklaring
Du må teste alle metodene i både controller- og service-lagene som ennå ikke har tester skrevet for seg. Til dette anbefales bruk av JUnit sammen med Mockito-biblioteket.
Retningslinjer for testskriving med JUnit
Her er noen sentrale metoder som kan være nyttige:
assertNotNull(result): Sikrer at resultatet av et metodekall ikke er null, noe som bekrefter at operasjonen var vellykket;
assertEquals(expected, actual): Sammenligner forventet verdi med faktisk verdi for å verifisere at korrekte data returneres;
assertTrue(condition): Kontrollerer at en betingelse er sann, for eksempel at en bokliste er tom hvis det ikke finnes poster i databasen;
verify(mock).methodCall(): Verifiserer at en spesifikk metode på et mock-objekt ble kalt med forventede parametere, og validerer interaksjonen mellom komponenter;
when(mock.methodCall()).thenReturn(value): Konfigurerer en mock til å returnere en bestemt verdi når en metode kalles, og simulerer avhengigheter i testene dine.
Testing av Controller
Her er tester allerede skrevet for metodene findAllBooks, findByAuthor, createBook og updateBook. Du må skrive tester for den gjenværende metoden. Nedenfor finner du noen tips som kan hjelpe deg med å implementere testen for denne metoden.
deleteBooks(String id)
For metoden deleteBooks(String id) må du verifisere at delete-metoden kalles med riktig id og teste feilhåndtering når du prøver å slette en ikke-eksisterende bok. For et vellykket svar, sjekk kun status; for feil, verifiser både status og feilmelding.
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 kontrolleren må du skrive to tester for denne metoden: én for vellykket sletting og en annen for når en 404 status returneres.
Vær oppmerksom på at servicemetoden vi skal mocke ikke returnerer noe, akkurat som kontrolleren.
Du kan bruke doNothing()-metoden for å stubbe en void-metode, slik at ingen handlinger utføres ved kall. Syntaksen er:
doNothing().when(someService).someVoidMethod();
Når du må håndtere et scenario der et unntak kastes, bruk doThrow(). Denne metoden i Mockito simulerer at et unntak kastes fra en void-metode. Syntaksen er:
doThrow(new ApiException(messageException, HttpStatus.NOT_FOUND)).when(bookService).deleteBook("1");
Testing av tjeneste
deleteBook(String id)
Metoden deleteBook(String id) krever validering for å sikre at bok-slettingsmetoden kalles med riktig id. I tillegg er det viktig å teste hvordan metoden håndterer situasjonen når en bok med angitt id ikke finnes.
Du må implementere to tester: én der entiteten finnes ved id og slettes, og en annen der et unntak kastes.
Hva om du ikke kan skrive tester?
Det er helt greit hvis du ikke forsto emnet på første forsøk; du kan ha behov for å lese gjennom testkonseptene på nytt. Jeg anbefaler også å gå gjennom løsningen til denne oppgaven.
Takk for tilbakemeldingene dine!