Testing i praksis: JUnit, Mockito og integrasjonstester · leksjon

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.

Leksjon 4 av 413 trinn

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:

  • @WebMvcTest laster bare inn kontrollere og webinfrastruktur
  • MockMvc simulerer HTTP-forespørsler uten en server
  • @MockBean leverer mockede tjenester
  • Kontroller status og responskropp med jsonPath
Gratis å komme i gang

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

  1. Spring Test Context Framework
  2. Testing av RESTful-API-er
  3. Innebygde databaser for testing
  4. Testing av web-lag med @WebMvcTest og MockMvc
← Tilbake til Testing i praksis: JUnit, Mockito og integrasjonstester