Testing av web-lag med @WebMvcTest og MockMvc
Test Spring Boot-kontrollere isolert med slice-testing ved hjelp av @WebMvcTest og MockMvc, uten å starte hele applikasjonskonteksten.
Testing av web-lag med @WebMvcTest og MockMvc er en gratis leksjon i Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Testing i praksis: JUnit, Mockito og integrasjonstester, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Hvorfor bruke slicetester?
Det tar lang tid å laste hele Spring-konteksten for hver kontrollertest. Spring Boot tilbyr testslices som bare laster inn bønnene De trenger. @WebMvcTest laster bare weblaget.
Hva @WebMvcTest laster inn
@WebMvcTest konfigurerer kontrollere, filtre og JSON-konverterere, men ikke tjenester eller repository-er. Disse samarbeidspartnerne leveres som mock-objekter.
Deklarere testen
Begrens testen til én kontroller slik at slicet forblir lite og raskt.
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired MockMvc mockMvc;
}Mocke tjenesten
Kontrollerens tjenesteavhengighet erstattes med en Mockito-mock ved hjelp av @MockBean, som plasserer mocken i konteksten.
@MockBean
UserService userService;Utføre en forespørsel
MockMvc simulerer HTTP-forespørsler mot kontrolleren uten en kjørende server.
mockMvc.perform(get("/users/1"))
.andExpect(status().isOk());Lage stubber og kontrollere
Lag en stub for den mockede tjenesten, utfør forespørselen, og kontroller responskroppen og statusen.
when(userService.find(1L))
.thenReturn(new User(1L, "Ada"));
mockMvc.perform(get("/users/1"))
.andExpect(jsonPath("$.name").value("Ada"));Kontrollere statuskoder
Valider feilmappinger, for eksempel 404 når tjenesten signaliserer at en entitet mangler.
when(userService.find(9L))
.thenThrow(new NotFoundException());
mockMvc.perform(get("/users/9"))
.andExpect(status().isNotFound());Teste POST med en kropp
Send JSON-innhold og kontroller at kontrolleren deserialiserer og svarer riktig.
mockMvc.perform(post("/users")
.contentType("application/json")
.content("{\"name\":\"Ada\"}"))
.andExpect(status().isCreated());JsonPath-påstander
jsonPath-uttrykk lar Dem kontrollere nestede felt, array-størrelser og verdier i JSON-responsen.
.andExpect(jsonPath("$.items.length()").value(3))Slicetester kontra full kontekst
Bruk @WebMvcTest til fokuserte og raske tester av weblaget. Spar @SpringBootTest til ekte ende-til-ende-forløp der De vil ha hele konteksten koblet sammen.
Fordeler med hastighet
Fordi bare weblaget lastes inn, starter disse testene på en brøkdel av tiden det tar å starte en test med full kontekst. Det gjør det enklere å oppnå grundigere dekning av kontrollere.
Rask kontroll
Hvordan håndteres tjenesteavhengigheter i en @WebMvcTest?
Oppsummering
De har lært å teste weblaget med et testslice:
@WebMvcTestlaster bare inn kontrollere og webinfrastrukturMockMvcsimulerer HTTP-forespørsler uten en server@MockBeanleverer mockede tjenester- Kontroller status og responskropp med
jsonPath
Lær deg Testing i praksis: JUnit, Mockito og integrasjonstester med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Testing av web-lag med @WebMvcTest og MockMvc» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Testing i praksis: JUnit, Mockito og integrasjonstester, inkludert «Testing av web-lag med @WebMvcTest og MockMvc», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Hva lærer jeg i «Testing av web-lag med @WebMvcTest og MockMvc»?
Test Spring Boot-kontrollere isolert med slice-testing ved hjelp av @WebMvcTest og MockMvc, uten å starte hele applikasjonskonteksten. Du øver på Testing i praksis: JUnit, Mockito og integrasjonstester med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Testing i praksis: JUnit, Mockito og integrasjonstester?
Ingen tidligere erfaring er nødvendig. Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Testing av web-lag med @WebMvcTest og MockMvc»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Testing i praksis: JUnit, Mockito og integrasjonstester-leksjonen?
Ja. Alle Testing i praksis: JUnit, Mockito og integrasjonstester-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Spring Test Context Framework
- Testing av RESTful-API-er
- Innebygde databaser for testing
- Testing av web-lag med @WebMvcTest og MockMvc