Testing i praksis: JUnit, Mockito og integrasjonstester · leksjon

Spring Test Context Framework

Forstå hvordan Spring sitt testkontekstrammeverk initialiserer og administrerer applikasjonskontekster for integrasjonstester.

Leksjon 1 av 411 trinn

Spring Test Context Framework er en gratis leksjon i Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit. Dette er leksjon 1 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.

Introduksjon til Spring-testkontekst

Velkommen til integrasjonstesting med Spring Boot! Når De skriver tester for Spring-applikasjoner, trenger De en måte å starte opp en del av applikasjonen på. Det er her Spring Test Context Framework kommer inn.

Det tilbyr infrastrukturen som laster inn og administrerer en ApplicationContext for testene Deres, slik at de kjører i et Spring-bevisst miljø. Dette er avgjørende for tester som samhandler med beans, tjenester eller datalag.

@SpringBootTest-annotasjonen

Kjernen i integrasjonstesting med Spring Boot er @SpringBootTest-annotasjonen. Den instruerer JUnit om å starte Spring Boot-applikasjonskonteksten for testen Deres.

  • Den starter en fullstendig ApplicationContext.
  • Den finner hovedkonfigurasjonsklassen, ofte klassen med @SpringBootApplication.
  • Den gir tilgang til alle Spring-beans i testen.

Tenk på det som å kjøre hele applikasjonen, men spesifikt for testens behov.

Slik lastes kontekster inn

Når @SpringBootTest brukes, leter Springs testrammeverk etter hovedklassen for applikasjonen, altså den som er annotert med @SpringBootApplication, og bruker den til å opprette en ApplicationContext.

Denne konteksten er i praksis en beholder for alle komponentene (beans) i applikasjonen. Testen kjører deretter mot denne aktive applikasjonskonteksten, slik at den kan samhandle med faktiske tjenester, repositories og andre Spring-administrerte komponenter.

Bufring av kontekster for høyere hastighet

Det kan ta tid å laste inn en fullstendig Spring-ApplicationContext. For å gjøre testpakken raskere bufrer Spring Test Context Framework kontekster på en intelligent måte.

  • Hvis flere tester krever nøyaktig samme konfigurasjon av konteksten, gjenbruker Spring den allerede innlastede konteksten.
  • Dette reduserer kjøringstiden betydelig, særlig i store prosjekter.
  • Konteksten lastes bare inn på nytt hvis konfigurasjonen, for eksempel egenskaper eller aktive profiler, endres.

Grunnleggende Spring-applikasjonseksempel

Her er en minimal Spring Boot-applikasjon. Når De bruker @SpringBootTest, laster rammeverket inn en kontekst basert på denne klassen, slik at beanene blir tilgjengelige for testene Deres.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class MyApp {

  public static void main(String[] args) {
    ApplicationContext context = SpringApplication.run(MyApp.class, args);
    System.out.println("App context loaded: " + (context != null));
  }
}

Bruk av @SpringBootTest (test)

La oss nå se hvordan en test kan bruke @SpringBootTest til å laste inn konteksten for MyApp fra forrige scene. Vi injiserer ApplicationContext for å bekrefte at den er lastet inn.

Legg merke til at denne testklassen ikke har en egen main-metode, siden JUnit-kjørere håndterer kjøringen av den.

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
class MyApplicationTests {

  @Test
  void contextLoads(ApplicationContext context) {
    assertThat(context).isNotNull();
    System.out.println("ApplicationContext loaded for test!");
  }
}

Tilpasse nettmiljøet

For nettapplikasjoner kan @SpringBootTest starte en nettserver for testene Deres. De styrer denne atferden ved hjelp av attributtet webEnvironment:

  • MOCK (standard): Tilbyr et simulert servletmiljø.
  • RANDOM_PORT: Starter en innebygd server på en tilfeldig port.
  • DEFINED_PORT: Starter en innebygd server på standardporten eller en konfigurert port.
  • NONE: Starter ikke en innebygd server.

RANDOM_PORT foretrekkes ofte for å unngå portkonflikter.

Eksempel på nettmiljø

Slik konfigurerer De @SpringBootTest til å starte en nettserver på en tilfeldig port. Dette gjør det mulig å utføre faktiske HTTP-forespørsler mot applikasjonen i testene Deres.

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.beans.factory.annotation.Value;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class WebAppTests {

  @Value(value="${local.server.port}")
  private int port;

  @Test
  void serverStarts() {
    assertThat(port).isNotZero();
    System.out.println("Web server started on port: " + port);
  }
}

Overstyre testegenskaper

Noen ganger trenger De bestemte konfigurasjonsegenskaper for testene som er annerledes enn i hovedapplikasjonen, for eksempel URL-en til en testdatabase. De kan overstyre disse ved hjelp av attributtet properties i @SpringBootTest.

Dette gjør det mulig å isolere testmiljøet uten å endre produksjonskoden.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;

@SpringBootApplication
public class PropApp implements CommandLineRunner {

  @Value("${app.message:Default Message}")
  private String message;

  public static void main(String[] args) {
    SpringApplication.run(PropApp.class, args);
  }

  @Override
  public void run(String... args) throws Exception {
    System.out.println("App Message: " + message);
  }
}

Rask sjekk

Hvilket alternativ for @SpringBootTest.WebEnvironment vil De bruke for å starte en innebygd nettserver på en tilgjengelig, tilfeldig port?

Oppsummering: Spring Test Context

De har lært om Spring Test Context Framework, et kraftig verktøy for integrasjonstesting. Vi har gått gjennom:

  • Formålet med rammeverket og @SpringBootTest.
  • Hvordan applikasjonskontekster lastes inn og bufres.
  • Tilpasning av testmiljøer med webEnvironment.
  • Overstyring av egenskaper for testspesifikke konfigurasjoner.

Dette grunnlaget er viktig for å skrive robuste og effektive integrasjonstester med Spring Boot!

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 «Spring Test Context Framework» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Testing i praksis: JUnit, Mockito og integrasjonstester, inkludert «Spring Test Context Framework», 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 «Spring Test Context Framework»?

Forstå hvordan Spring sitt testkontekstrammeverk initialiserer og administrerer applikasjonskontekster for integrasjonstester. 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 1 av 4.

Hvor lang tid tar leksjonen «Spring Test Context Framework»?

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