Spring Test Context Framework
Forstå, hvordan Spring's test context-framework initialiserer og håndterer applikationskontekster til integrationstests.
Spring Test Context Framework er en gratis Mestrer test: JUnit, Mockito og integrationstest-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Mestrer test: JUnit, Mockito og integrationstest, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.
Introduktion til Spring-testkontekst
Velkommen til integrationstest af Spring Boot! Når du skriver test til Spring-applikationer, har du brug for en måde at starte en del af din applikation på. Det er her, Spring Test Context Framework kommer ind i billedet.
Det leverer infrastrukturen til at indlæse og administrere en ApplicationContext til dine test og sikrer, at de kører i et Spring-bevidst miljø. Det er afgørende for test, der interagerer med beans, tjenester eller datalag.
Annotationen @SpringBootTest
Kernen i integrationstest af Spring Boot er annotationen @SpringBootTest. Den fortæller JUnit, at Spring Boot-applikationskonteksten skal startes til din test.
- Den starter en komplet
ApplicationContext. - Den finder hovedkonfigurationsklassen (ofte din
@SpringBootApplication-klasse). - Den giver adgang til alle dine Spring-beans i testen.
Tænk på det som at køre hele din applikation, men specifikt til testens behov.
Sådan indlæses kontekster
Når @SpringBootTest bruges, leder Springs testramme efter din hovedapplikationsklasse (den, der er annoteret med @SpringBootApplication) og bruger den til at oprette en ApplicationContext.
Denne kontekst er i praksis en container til alle applikationens komponenter (beans). Din test kører derefter mod denne aktive applikationskontekst, så den kan interagere med faktiske tjenester, repositories og andre Spring-administrerede komponenter.
Caching af kontekster for højere hastighed
Det kan være langsomt at indlæse en komplet Spring ApplicationContext. For at gøre din testsuite hurtigere cacher Spring Test Context Framework kontekster intelligent.
- Hvis flere test kræver nøjagtig den samme konfiguration af konteksten, genbruger Spring den kontekst, der allerede er indlæst.
- Det reducerer testkørselstiden markant, især i store projekter.
- Konteksten indlæses kun igen, hvis konfigurationen (f.eks. egenskaber eller aktive profiler) ændres.
Grundlæggende Spring-applikationseksempel
Her er en minimal Spring Boot-applikation. Når du bruger @SpringBootTest, indlæser rammen en kontekst baseret på denne klasse, så dens beans bliver tilgængelige for dine test.
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));
}
}Brug af @SpringBootTest (test)
Lad os nu se, hvordan en test bruger @SpringBootTest til at indlæse konteksten for MyApp fra den forrige scene. Vi injicerer ApplicationContext for at kontrollere, at den er indlæst.
Bemærk, at denne testklasse ikke selv har en main-metode, fordi JUnit-kørsler håndterer dens eksekvering.
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!");
}
}Tilpasning af webmiljøet
I webapplikationer kan @SpringBootTest starte en webserver til dine test. Du styrer denne adfærd med attributten webEnvironment:
MOCK(standard): Leverer et simuleret servletmiljø.RANDOM_PORT: Starter en indlejret server på en tilfældig port.DEFINED_PORT: Starter en indlejret server på standardporten eller den konfigurerede port.NONE: Starter ikke en indlejret server.
RANDOM_PORT foretrækkes ofte for at undgå portkonflikter.
Eksempel på webmiljø
Sådan konfigurerer du @SpringBootTest til at starte en webserver på en tilfældig port. Det giver dig mulighed for at sende faktiske HTTP-anmodninger til din applikation i dine test.
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);
}
}Tilsidesættelse af testegenskaber
Nogle gange har du brug for bestemte konfigurationsegenskaber til dine test, som adskiller sig fra dem i hovedapplikationen (f.eks. URL'en til en testdatabase). Du kan tilsidesætte dem ved hjælp af attributten properties i @SpringBootTest.
Det giver dig mulighed for at isolere dit testmiljø uden at ændre produktionskoden.
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);
}
}Hurtigt tjek
Hvilken @SpringBootTest.WebEnvironment-indstilling vil du bruge til at starte en indlejret webserver på en ledig, tilfældig port?
Opsummering: Spring Test Context
Du har lært om Spring Test Context Framework, et effektivt værktøj til integrationstest. Vi gennemgik:
- Formålet med rammen og
@SpringBootTest. - Hvordan applikationskontekster indlæses og caches.
- Tilpasning af testmiljøer med
webEnvironment. - Tilsidesættelse af egenskaber til testspecifikke konfigurationer.
Dette grundlag er afgørende for at skrive robuste og effektive Spring Boot-integrationstest!
Lær Mestrer test: JUnit, Mockito og integrationstest med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Spring Test Context Framework” gratis?
Ja — alle 3 lektioner i læringssporet Mestrer test: JUnit, Mockito og integrationstest, inklusive “Spring Test Context Framework”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Mestrer test: JUnit, Mockito og integrationstest-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Spring Test Context Framework”?
Forstå, hvordan Spring's test context-framework initialiserer og håndterer applikationskontekster til integrationstests. Du øver dig i Mestrer test: JUnit, Mockito og integrationstest med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Mestrer test: JUnit, Mockito og integrationstest?
Der kræves ingen tidligere erfaring. Mestrer test: JUnit, Mockito og integrationstest på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Spring Test Context Framework”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Mestrer test: JUnit, Mockito og integrationstest-lektion?
Ja. Alle Mestrer test: JUnit, Mockito og integrationstest-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Spring Test Context Framework
- Test af RESTful API'er
- Embedded-databaser til tests
- Test af web-lag med @WebMvcTest og MockMvc