Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Utfordring: Enhetstesting | Testing av Backend-Applikasjoner
Spring Boot Backend

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

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); }

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 emnetførste forsøk; du kan ha behov for å lese gjennom testkonseptene på nytt. Jeg anbefaler også å gå gjennom løsningen til denne oppgaven.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

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

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

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); }

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 emnetførste forsøk; du kan ha behov for å lese gjennom testkonseptene på nytt. Jeg anbefaler også å gå gjennom løsningen til denne oppgaven.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 5. Kapittel 4
some-alt