Tilsidesæt egenskaber i Spring's Tests

1. Oversigt

I denne vejledning ser vi på forskellige måder at tilsidesætte egenskaber i Spring's tests.

Spring giver faktisk en række løsninger til dette, så vi har en hel del at udforske her.

2. Afhængigheder

For at arbejde med forårstest er vi selvfølgelig nødt til at tilføje en testafhængighed:

 org.springframework.boot spring-boot-starter-test 2.1.6.RELEASE test 

Det spring-boot-starter-test afhængighed indeholder alt, hvad vi har brug for for at tilsidesætte egenskabsværdien i testene.

3. Opsætning

Først bliver vi nødt til at oprette en klasse i applikationen, der bruger vores egenskaber:

@Komponent offentlig klasse PropertySourceResolver {@Value ("$ {eksempel.firstProperty}") privat streng firstProperty; @Value ("$ {eksempel.secondProperty}") privat streng secondProperty; public String getFirstProperty () {return firstProperty; } public String getSecondProperty () {return secondProperty; }}

Lad os derefter tildele værdier til dem. Det kan vi gøre ved at oprette application.properties i src / main / ressourcer:

eksempel.firstProperty = standardFørste eksempel.secondProperty = defaultSecond

4. Tilsidesættelse af en ejendomsfil

Nu tilsidesætter vi egenskaber ved at placere ejendomsfilen i testressourcerne. Denne fil skal værepå samme klassesti som standard.

Derudover skal det indeholder alle ejendomsnøglerne angivet i standardfilen. Derfor tilføjer vi application.properties fil i src / test / ressourcer:

eksempel.firstProperty = fil eksempel.secondProperty = fil

Lad os også tilføje den test, der gør brug af vores løsning:

@RunWith (SpringRunner.class) @SpringBootTest offentlig klasse TestResourcePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test offentlig ugyldighed shouldTestResourceFile_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Streng secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("fil", firstProperty); assertEquals ("fil", secondProperty); }}

Denne metode er meget effektiv, når vi vil tilsidesætte flere egenskaber fra filen.

Og hvis vi ikke satte den eksempel.secondProperty i filen ville applikationskonteksten ikke finde denne egenskab.

5. Forårsprofiler

I dette afsnit lærer vi, hvordan vi håndterer vores problem ved hjælp af Spring Profiles. I modsætning til den foregående metodedenne fletter egenskaber fra standardfilen og den profilerede fil.

Lad os først oprette en Ansøgningtest.egenskaber fil i src / test / ressourcer:

eksempel.firstProperty = profil

Derefter opretter vi en test, der bruger prøve profil:

@RunWith (SpringRunner.class) @SpringBootTest @ActiveProfiles ("test") offentlig klasse ProfilePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test offentlig ugyldighed shouldProfiledProperty_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Streng secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("profil", firstProperty); assertEquals ("defaultSecond", secondProperty); }}

Denne tilgang giver os mulighed for at bruge både standard- og testværdier. Derfor er dette en god metode, når vi har brug for det tilsidesætte flere egenskaber fra en fil, men vi vil stadig bruge standard dem.

Derudover kan vi lære mere om Spring-profiler i vores Forårsprofiler vejledning.

6. @SpringBootTest

En anden måde at tilsidesætte ejendomsværdien på er at bruge @SpringBootTest kommentar:

@RunWith (SpringRunner.class) @SpringBootTest (egenskaber = {"eksempel.firstProperty = annotation"}) offentlig klasse SpringBootPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test offentlig ugyldighed shouldSpringBootTestAnnotation_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Streng secondProperty = propertySourceResolver.getSecondProperty (); Assert.assertEquals ("annotation", firstProperty); Assert.assertEquals ("defaultSecond", secondProperty); }}

Som vi kan se,det eksempel.firstProperty er blevet tilsidesat, mens eksempel.secondProperty har ikke været. Derfor er dette en god løsning, når vi kun har brug for at tilsidesætte specifikke egenskaber til testen. Dette er den eneste metode, der kræver brug af Spring Boot.

7. TestPropertySourceUtils

I dette afsnit lærer vi, hvordan du tilsidesætter egenskaber ved hjælp af TestPropertySourceUtils klasse i ApplicationContextInitializer.

Det TestPropertySourceUtils kommer med to metoder, som vi kan bruge til at definere en anden egenskabsværdi.

Lad os oprette en initialiseringsklasse, som vi bruger i vores test:

offentlig klasse PropertyOverrideContextInitializer implementerer ApplicationContextInitializer {static final String PROPERTY_FIRST_VALUE = "contextClass"; @Override public void initialize (ConfigurableApplicationContext configurableApplicationContext) {TestPropertySourceUtils.addInlinedPropertiesToEnvironment (configurableApplicationContext, "example.firstProperty =" + PROPERTY_FIRST_VALUE); TestPropertySourceUtils.addPropertiesFilesToEnvironment (configurableApplicationContext, "context-override-application.properties"); }}

Derefter tilføjer vi context-override-application.properties fil til src / test / ressourcer:

eksempel.secondProperty = contextFile

Endelig skal vi oprette en testklasse, der bruger vores initializer:

@RunWith (SpringRunner.class) @ContextConfiguration (initializers = PropertyOverrideContextInitializer.class, classes = Application.class) public class ContextPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test offentlig ugyldighed skalContext_overridePropertyValues ​​() {final String firstProperty = propertySourceResolver.getFirstProperty (); final String secondProperty = propertySourceResolver.getSecondProperty (); assertEquals (PropertyOverrideContextInitializer.PROPERTY_FIRST_VALUE, firstProperty); assertEquals ("contextFile", secondProperty); }}

Det eksempel.firstProperty er blevet tilsidesat fra den inline-metode.

Det eksempel.secondProperty er blevet tilsidesat fra den specifikke fil i den anden metode. Denne tilgang giver os mulighed for at definere forskellige egenskabsværdier, når vi initialiserer konteksten.

8. Konklusion

I denne vejledning har vi fokuseret på de mange måder, vi kan bruge til at tilsidesætte egenskaber i vores tests.

Vi har også opdaget, hvornår de skal bruge hver løsning, eller i nogle tilfælde hvornår de skal blandes.

Vi har selvfølgelig @TestPropertySource kommentar til vores rådighed så godt.

Som altid er koden til eksempler tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found