Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Yksikkötestaus | Taustasovellusten Testaaminen
Spring Boot Backend

bookHaaste: Yksikkötestaus

Tehtävä

Olemme lähestymässä tämän kurssin loppua, ja viimeistelläksemme sovelluksen ehdotan, että kirjoitat loppuun kaikki yksikkötestit controller- ja service-kerroksille.

Tehtävän selitys

Sinun tulee testata kaikki metodit sekä controller- että service-kerroksissa, joille ei vielä ole testejä kirjoitettu. Suosittelen käyttämään tähän JUnit-kehystä yhdessä Mockito-kirjaston kanssa.

Testien kirjoitusohjeet JUnitille

Tässä on joitakin keskeisiä metodeja, joista on hyötyä:

assertNotNull(result): Varmistaa, että metodikutsun tulos ei ole null, mikä osoittaa, että operaatio oli onnistunut;

assertEquals(expected, actual): Vertaa odotettua arvoa ja todellista arvoa varmistaakseen, että oikea data palautetaan;

assertTrue(condition): Tarkistaa, että ehto on tosi, esimerkiksi että kirjalista on tyhjä, jos tietokannassa ei ole tietueita;

verify(mock).methodCall(): Varmistaa, että tiettyä metodia on kutsuttu mock-oliolla odotetuilla parametreilla, mikä todentaa komponenttien välisen vuorovaikutuksen;

when(mock.methodCall()).thenReturn(value): Määrittää mockin palauttamaan tietyn arvon, kun metodia kutsutaan, simuloiden riippuvuuksia testeissäsi.

Kontrollerin testaaminen

Tässä testit on jo kirjoitettu metodeille findAllBooks, findByAuthor, createBook ja updateBook. Sinun täytyy kirjoittaa testit jäljellä olevalle metodille. Alla on muutamia vinkkejä, jotka auttavat toteuttamaan testin tälle metodille.

deleteBooks(String id)

deleteBooks(String id) metodin osalta tulee varmistaa, että delete-metodia kutsutaan oikealla id ja testata virheenkäsittely tilanteessa, jossa yritetään poistaa olemattoman kirjan. Onnistuneessa vastauksessa tarkistetaan vain status; virhetilanteissa tarkistetaan sekä status että virheilmoitus.

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

Kontrollerille sinun tulee kirjoittaa kaksi testiä tälle metodille: yksi onnistuneelle poistolle ja toinen tilanteelle, jossa palautetaan 404 status.

Huomioi, että palvelumetodi, jota tullaan mockaamaan, ei palauta mitään, kuten ei myöskään kontrolleri.

Voit käyttää doNothing() metodia stubbaamaan void-metodin, jolloin mitään ei tapahdu sen kutsuessa. Syntaksi on:

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

Kun sinun täytyy käsitellä tilanne, jossa poikkeus heitetään, käytä doThrow(). Tämä metodi Mockito simuloi poikkeuksen heittämistä void-metodista. Syntaksi on:

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

Palvelun testaus

deleteBook(String id)

deleteBook(String id) metodi vaatii validoinnin, jotta voidaan varmistaa, että kirjan poisto kutsutaan oikealla id-llä. Lisäksi on tärkeää testata, miten metodi käsittelee tilanteen, jossa kirjaa annetulla id-llä ei löydy.

Sinun tulee toteuttaa kaksi testiä: yksi, jossa entiteetti löytyy id-llä ja poistetaan, ja toinen, jossa poikkeus heitetään.

Entä jos et voi kirjoittaa testejä?

On täysin hyväksyttävää, jos et ymmärtänyt aihetta ensimmäisellä yrittämällä; saatat tarvita testauskonseptien uudelleenlukemista. Suosittelen myös tutustumaan tämän tehtävän ratkaisuun.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 3.45

bookHaaste: Yksikkötestaus

Pyyhkäise näyttääksesi valikon

Tehtävä

Olemme lähestymässä tämän kurssin loppua, ja viimeistelläksemme sovelluksen ehdotan, että kirjoitat loppuun kaikki yksikkötestit controller- ja service-kerroksille.

Tehtävän selitys

Sinun tulee testata kaikki metodit sekä controller- että service-kerroksissa, joille ei vielä ole testejä kirjoitettu. Suosittelen käyttämään tähän JUnit-kehystä yhdessä Mockito-kirjaston kanssa.

Testien kirjoitusohjeet JUnitille

Tässä on joitakin keskeisiä metodeja, joista on hyötyä:

assertNotNull(result): Varmistaa, että metodikutsun tulos ei ole null, mikä osoittaa, että operaatio oli onnistunut;

assertEquals(expected, actual): Vertaa odotettua arvoa ja todellista arvoa varmistaakseen, että oikea data palautetaan;

assertTrue(condition): Tarkistaa, että ehto on tosi, esimerkiksi että kirjalista on tyhjä, jos tietokannassa ei ole tietueita;

verify(mock).methodCall(): Varmistaa, että tiettyä metodia on kutsuttu mock-oliolla odotetuilla parametreilla, mikä todentaa komponenttien välisen vuorovaikutuksen;

when(mock.methodCall()).thenReturn(value): Määrittää mockin palauttamaan tietyn arvon, kun metodia kutsutaan, simuloiden riippuvuuksia testeissäsi.

Kontrollerin testaaminen

Tässä testit on jo kirjoitettu metodeille findAllBooks, findByAuthor, createBook ja updateBook. Sinun täytyy kirjoittaa testit jäljellä olevalle metodille. Alla on muutamia vinkkejä, jotka auttavat toteuttamaan testin tälle metodille.

deleteBooks(String id)

deleteBooks(String id) metodin osalta tulee varmistaa, että delete-metodia kutsutaan oikealla id ja testata virheenkäsittely tilanteessa, jossa yritetään poistaa olemattoman kirjan. Onnistuneessa vastauksessa tarkistetaan vain status; virhetilanteissa tarkistetaan sekä status että virheilmoitus.

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

Kontrollerille sinun tulee kirjoittaa kaksi testiä tälle metodille: yksi onnistuneelle poistolle ja toinen tilanteelle, jossa palautetaan 404 status.

Huomioi, että palvelumetodi, jota tullaan mockaamaan, ei palauta mitään, kuten ei myöskään kontrolleri.

Voit käyttää doNothing() metodia stubbaamaan void-metodin, jolloin mitään ei tapahdu sen kutsuessa. Syntaksi on:

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

Kun sinun täytyy käsitellä tilanne, jossa poikkeus heitetään, käytä doThrow(). Tämä metodi Mockito simuloi poikkeuksen heittämistä void-metodista. Syntaksi on:

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

Palvelun testaus

deleteBook(String id)

deleteBook(String id) metodi vaatii validoinnin, jotta voidaan varmistaa, että kirjan poisto kutsutaan oikealla id-llä. Lisäksi on tärkeää testata, miten metodi käsittelee tilanteen, jossa kirjaa annetulla id-llä ei löydy.

Sinun tulee toteuttaa kaksi testiä: yksi, jossa entiteetti löytyy id-llä ja poistetaan, ja toinen, jossa poikkeus heitetään.

Entä jos et voi kirjoittaa testejä?

On täysin hyväksyttävää, jos et ymmärtänyt aihetta ensimmäisellä yrittämällä; saatat tarvita testauskonseptien uudelleenlukemista. Suosittelen myös tutustumaan tämän tehtävän ratkaisuun.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4
some-alt