RESTful-APIen testaaminen
Käyttäkää `MockMvc`- tai `WebTestClient`-työkalua kattavien integraatiotestien kirjoittamiseen Spring Boot -REST-ohjaimille.
RESTful-APIen testaaminen on ilmainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.
Miksi REST-rajapintoja testataan?
RESTful-rajapinnat ovat monien nykyaikaisten sovellusten perusta. Niiden testaaminen on tärkeää, jotta voidaan varmistaa niiden toiminta odotetulla tavalla, erilaisten syötteiden käsittely ja oikeiden vastausten palauttaminen.
Tässä oppitunnissa keskitytään Spring Boot -REST-kontrollerien integraatiotestien kirjoittamiseen tehokkaiden työkalujen MockMvc ja WebTestClient avulla.
Spring Boot -testin valmistelu
Spring Boot -kontrollerien testaaminen vaatii erityisen valmistelun. @SpringBootTest-annotaatio lataa koko sovelluskontekstin, ja @AutoConfigureMockMvc määrittää MockMvc-olion puolestamme.
Tässä on testikontrolleriluokan perusrakenne:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
@SpringBootTest
@AutoConfigureMockMvc
public class MyApiControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void contextLoads() {
// Your tests will go here
}
}Johdatus MockMvc:hen
MockMvc mahdollistaa Spring MVC -kontrollerien testaamisen käynnistämättä täyttä HTTP-palvelinta. Se simuloi HTTP-pyyntöjä ja -vastauksia, joten testit ovat nopeita ja eristettyjä.
Se sopii erityisen hyvin kontrollerikerroksen testaamiseen ja varmistaa, että reitit, pyyntöjen mappaukset ja vastausmuodot ovat oikein.
MockMvc: GET-pyyntöjen testaaminen
Testataan yksinkertaista GET-päätepistettä, esimerkiksi /api/hello-päätepistettä, joka palauttaa tekstin "Hello, CoddyKit!". Varmistamme HTTP-tilakoodin ja vastauksen sisällön.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume a @RestController with @GetMapping("/api/hello") returning "Hello, CoddyKit!"
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testHelloEndpoint() throws Exception {
mockMvc.perform(get("/api/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, CoddyKit!"));
}
}MockMvc: GET ja polkumuuttujat
Rajapinnoissa käytetään usein polkumuuttujia resurssien tunnistamiseen, esimerkiksi /api/users/{id}. MockMvc käsittelee niitä luontevasti.
Näin testaat päätepistettä, joka vastaanottaa tunnisteen:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume @GetMapping("/api/users/{id}") returns "User: " + id
@SpringBootTest
@AutoConfigureMockMvc
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetUserById() throws Exception {
mockMvc.perform(get("/api/users/{id}", 123))
.andExpect(status().isOk())
.andExpect(content().string("User: 123"));
}
}MockMvc: POST-pyyntöjen testaaminen
POST-pyyntöihin lähetetään yleensä pyyntörunko, usein JSON-muodossa. Sisältötyypin ja rungon voi määrittää MockMvc-olion avulla.
Testataan päätepistettä, joka luo kohteen:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
// Assume @PostMapping("/api/items") creates an item and returns it
@SpringBootTest
@AutoConfigureMockMvc
public class ItemControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testCreateItem() throws Exception {
String newItemJson = "{\"name\":\"Laptop\", \"price\":1200}";
mockMvc.perform(post("/api/items")
.contentType(MediaType.APPLICATION_JSON)
.content(newItemJson))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.name").value("Laptop"));
}
}Johdatus WebTestClientiin
WebTestClient on ei-estävä, reaktiivinen asiakas web-sovellusten testaamiseen. Se kuuluu Spring WebFluxiin, mutta sitä voidaan käyttää myös Spring MVC -kontrollerien testaamiseen.
- Sillä voi tehdä oikeita HTTP-kutsuja, jos se on määritetty käyttämään käynnissä olevaa palvelinta.
- Se voidaan myös yhdistää
MockMvc-olioon palvelimen puolella tapahtuvaa testausta varten samalla tavalla kuinMockMvcitse, mutta reaktiivisella rajapinnalla.
WebTestClient käytännössä
WebTestClient-olion käyttö muistuttaa MockMvc-olion käyttöä, mutta sen sujuva rajapinta vaikuttaa usein nykyaikaisemmalta, erityisesti reaktiivisissa sovelluksissa. Testataan /api/hello-päätepisteemme uudelleen.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.web.reactive.server.WebTestClient;
// For WebTestClient with Spring MVC, we can use @SpringBootTest
// and inject WebTestClient.Builder to build it with MockMvc.webAppContextSetup
// For simplicity, this example assumes a WebFlux app or WebTestClient set up for MockMvc
// @SpringBootTest
// class HelloWebClientTest {
// @Autowired WebApplicationContext wac;
// WebTestClient client;
// @BeforeEach void setup() { client = WebTestClient.bindToApplicationContext(wac).build(); }
// ...
// For a simpler runnable example focusing on WebTestClient usage:
@WebFluxTest // This annotation sets up a minimal reactive context for WebTestClient
public class HelloWebClientTest {
@Autowired
private WebTestClient webTestClient;
@Test
void testHelloEndpoint() {
webTestClient.get().uri("/api/hello")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello, CoddyKit!");
}
}MockMvc vai WebTestClient
Milloin kannattaa käyttää MockMvc- ja milloin WebTestClient-oliota?
MockMvc: Sopii parhaiten perinteisiin Spring MVC -sovelluksiin. Se toimii palvelimen puolella, simuloi pyyntöjä eikä vaadi käynnissä olevaa palvelinta, joten se on nopea.WebTestClient: Sopii ihanteellisesti reaktiivisiin Spring WebFlux -sovelluksiin. Se tarjoaa myös reaktiivisen asiakasrajapinnan Spring MVC -sovellusten testaamiseen, joten testien kirjoittaminen on nykyaikaisempaa ja sujuvampaa. Sillä voidaan jopa käyttää käynnissä olevaa palvelinta todellisiin päästä päähän -integraatiotesteihin.
Useimmissa Spring Boot -REST-rajapintojen integraatiotesteissä, joissa keskitytään kontrollerikerrokseen, MockMvc on nopeutensa ja suoran integraationsa ansiosta hyvä valinta.
Pikakysymys: rajapintojen testaustyökalut
Olette rakentamassa Spring Boot -sovellusta perinteisellä Spring MVC:llä. Haluatte kirjoittaa REST-kontrollereille nopeita ja eristettyjä integraatiotestejä käynnistämättä täyttä HTTP-palvelinta.
Kertaus ja seuraavat vaiheet
Tässä oppitunnissa opitte kirjoittamaan kattavia integraatiotestejä Spring Boot -REST-kontrollereille. Käsittelimme seuraavat aiheet:
- testiympäristön määrittäminen
@SpringBootTest- ja@AutoConfigureMockMvc-annotaatioilla MockMvc-olion käyttäminen GET- ja POST-pyyntöjen simulointiin sekä tilan ja sisällön tarkistamiseenWebTestClient-olion esittely reaktiivista testausta ja muita käyttötapauksia vartenMockMvc- jaWebTestClient-olioiden erot sekä tilanteet, joissa kumpaakin kannattaa käyttää
Nämä työkalut ovat olennaisia vankkojen ja luotettavien RESTful-rajapintojen rakentamisessa!
Opi Testauksen hallinta: JUnit, Mockito ja integraatiotestit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”RESTful-APIen testaaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “RESTful-APIen testaaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”RESTful-APIen testaaminen”?
Käyttäkää `MockMvc`- tai `WebTestClient`-työkalua kattavien integraatiotestien kirjoittamiseen Spring Boot -REST-ohjaimille. Harjoittelet Testauksen hallinta: JUnit, Mockito ja integraatiotestit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Testauksen hallinta: JUnit, Mockito ja integraatiotestit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”RESTful-APIen testaaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunnilla?
Kyllä. Jokainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Spring Test Context Framework
- RESTful-APIen testaaminen
- Sulautetut tietokannat testeissä
- Web-kerrosten testaaminen @WebMvcTestillä ja MockMvc:llä