Haaste: 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
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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.45
Haaste: 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
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.
Kiitos palautteestasi!