Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Utmaning: Enhetstestning | Testning av Backendapplikationer
Spring Boot Backend

bookUtmaning: Enhetstestning

Uppgift

Vi närmar oss slutet av denna kurs, och för att avsluta vår applikation föreslår jag att du färdigställer alla enhetstester för controller- och service-lagren.

Uppgiftsförklaring

Du behöver testa alla metoder i både controller- och service-lagren som ännu inte har tester skrivna för sig. För detta rekommenderas användning av JUnit tillsammans med biblioteket Mockito.

Riktlinjer för testskrivning med JUnit

Här är några viktiga metoder som kan vara användbara:

assertNotNull(result): Säkerställer att resultatet av ett metodanrop inte är null, vilket bekräftar att operationen var lyckad;

assertEquals(expected, actual): Jämför det förväntade värdet med det faktiska värdet för att verifiera att korrekta data returneras;

assertTrue(condition): Kontrollerar att ett villkor är sant, till exempel att en lista med böcker är tom om det inte finns några poster i databasen;

verify(mock).methodCall(): Verifierar att en specifik metod på ett mock-objekt anropades med de förväntade parametrarna, vilket validerar interaktionen mellan komponenter;

when(mock.methodCall()).thenReturn(value): Konfigurerar en mock att returnera ett visst värde när en metod anropas, vilket simulerar beroenden i dina tester.

Testning av Controller

Här har tester redan skrivits för metoderna findAllBooks, findByAuthor, createBook och updateBook. Du behöver skriva tester för den återstående metoden. Nedan finns några tips som hjälper dig att implementera testet för denna metod.

deleteBooks(String id)

För metoden deleteBooks(String id) behöver du verifiera att delete-metoden anropas med korrekt id och testa felhantering vid försök att ta bort en icke-existerande bok. För ett lyckat svar, kontrollera endast status; för fel, verifiera både status och felmeddelande.

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 controllern behöver du skriva två tester för denna metod: ett för lyckad borttagning och ett annat för när en 404 status returneras.

Observera att servicemetoden vi kommer att mocka inte returnerar något, precis som controllern.

Du kan använda metoden doNothing() för att stubba en void-metod, vilket säkerställer att inga åtgärder utförs vid anrop. Syntaxen är:

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

När du behöver hantera ett scenario där ett undantag kastas, använd doThrow(). Denna metod i Mockito simulerar att ett undantag kastas från en void-metod. Syntaxen är:

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

Testning av service

deleteBook(String id)

Metoden deleteBook(String id) kräver validering för att säkerställa att metoden för borttagning av bok anropas med korrekt id. Dessutom är det viktigt att testa hur metoden hanterar situationen när en bok med det angivna id inte hittas.

Du behöver implementera två tester: ett där entiteten hittas via id och tas bort, och ett annat där ett undantag kastas.

Vad händer om du inte kan skriva tester?

Det är helt okej om du inte förstod ämnet vid första försöket; du kan behöva läsa igenom testningskoncepten igen. Jag rekommenderar även att du går igenom lösningen till denna uppgift.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookUtmaning: Enhetstestning

Svep för att visa menyn

Uppgift

Vi närmar oss slutet av denna kurs, och för att avsluta vår applikation föreslår jag att du färdigställer alla enhetstester för controller- och service-lagren.

Uppgiftsförklaring

Du behöver testa alla metoder i både controller- och service-lagren som ännu inte har tester skrivna för sig. För detta rekommenderas användning av JUnit tillsammans med biblioteket Mockito.

Riktlinjer för testskrivning med JUnit

Här är några viktiga metoder som kan vara användbara:

assertNotNull(result): Säkerställer att resultatet av ett metodanrop inte är null, vilket bekräftar att operationen var lyckad;

assertEquals(expected, actual): Jämför det förväntade värdet med det faktiska värdet för att verifiera att korrekta data returneras;

assertTrue(condition): Kontrollerar att ett villkor är sant, till exempel att en lista med böcker är tom om det inte finns några poster i databasen;

verify(mock).methodCall(): Verifierar att en specifik metod på ett mock-objekt anropades med de förväntade parametrarna, vilket validerar interaktionen mellan komponenter;

when(mock.methodCall()).thenReturn(value): Konfigurerar en mock att returnera ett visst värde när en metod anropas, vilket simulerar beroenden i dina tester.

Testning av Controller

Här har tester redan skrivits för metoderna findAllBooks, findByAuthor, createBook och updateBook. Du behöver skriva tester för den återstående metoden. Nedan finns några tips som hjälper dig att implementera testet för denna metod.

deleteBooks(String id)

För metoden deleteBooks(String id) behöver du verifiera att delete-metoden anropas med korrekt id och testa felhantering vid försök att ta bort en icke-existerande bok. För ett lyckat svar, kontrollera endast status; för fel, verifiera både status och felmeddelande.

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 controllern behöver du skriva två tester för denna metod: ett för lyckad borttagning och ett annat för när en 404 status returneras.

Observera att servicemetoden vi kommer att mocka inte returnerar något, precis som controllern.

Du kan använda metoden doNothing() för att stubba en void-metod, vilket säkerställer att inga åtgärder utförs vid anrop. Syntaxen är:

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

När du behöver hantera ett scenario där ett undantag kastas, använd doThrow(). Denna metod i Mockito simulerar att ett undantag kastas från en void-metod. Syntaxen är:

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

Testning av service

deleteBook(String id)

Metoden deleteBook(String id) kräver validering för att säkerställa att metoden för borttagning av bok anropas med korrekt id. Dessutom är det viktigt att testa hur metoden hanterar situationen när en bok med det angivna id inte hittas.

Du behöver implementera två tester: ett där entiteten hittas via id och tas bort, och ett annat där ett undantag kastas.

Vad händer om du inte kan skriva tester?

Det är helt okej om du inte förstod ämnet vid första försöket; du kan behöva läsa igenom testningskoncepten igen. Jag rekommenderar även att du går igenom lösningen till denna uppgift.

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 4
some-alt