Zamijeni svojstva u proljetnim testovima

1. Pregled

U ovom ćemo uputstvu pogledati razne načine nadjačavanja svojstava u Springovim testovima.

Proljeće zapravo nudi brojna rješenja za to, tako da ovdje moramo poprilično istražiti.

2. Ovisnosti

Naravno, da bismo mogli raditi s Spring testovima, moramo dodati ovisnost testa:

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

The proljetni-boot-starter-test ovisnost sadrži sve što nam je potrebno da poništimo vrijednost svojstva u testovima.

3. Postavljanje

Prvo, u aplikaciji ćemo morati stvoriti klasu koja će koristiti naša svojstva:

@Component javna klasa PropertySourceResolver {@Value ("$ {example.firstProperty}") private String firstProperty; @Value ("$ {example.secondProperty}") private String secondProperty; javni String getFirstProperty () {return firstProperty; } javni String getSecondProperty () {return secondProperty; }}

Dalje, dodijelimo im vrijednosti. To možemo učiniti stvaranjem primjena.svojstva u src / main / resources:

example.firstProperty = defaultFirst example.secondProperty = defaultSecond

4. Nadjačavanje datoteke svojstva

Sada ćemo nadjačati svojstva stavljanjem datoteke svojstava u testne resurse. Ova datoteka mora bitina istoj stazi kao zadani.

Uz to, trebao bi sadrže sve ključeve svojstava navedeno u zadanoj datoteci. Stoga ćemo dodati primjena.svojstva datoteke u src / test / resources:

example.firstProperty = datoteka example.secondProperty = datoteka

Dodajmo i test koji će koristiti naše rješenje:

@RunWith (SpringRunner.class) @SpringBootTest javna klasa TestResourcePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test javna praznina shouldTestResourceFile_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Niz secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("datoteka", firstProperty); assertEquals ("datoteka", secondProperty); }}

Ova je metoda vrlo učinkovita kada želimo poništiti više svojstava iz datoteke.

I, ako nismo stavili primjer.secondProperty u datoteci, kontekst aplikacije ne bi otkrio ovo svojstvo.

5. Proljetni profili

U ovom ćemo odjeljku naučiti kako se nositi s našim problemom pomoću proljetnih profila. Za razliku od prethodne metode,ovaj spaja svojstva zadane datoteke i profilirane datoteke.

Prvo, izradimo primjenatest.svojstva datoteku u src / test / resources:

example.firstProperty = profil

Nakon toga stvorit ćemo test koji će koristiti test profil:

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

Ovaj nam pristup omogućuje upotrebu zadanih i test vrijednosti. Stoga je ovo izvrsna metoda kada to trebamo nadjačati više svojstava iz datoteke, ali svejedno želimo koristiti zadane one.

Uz to, više o proljetnim profilima možemo saznati u našoj Proljetni profili udžbenik.

6. @SpringBootTest

Drugi način za poništavanje vrijednosti svojstva je upotreba @SpringBootTest napomena:

@RunWith (SpringRunner.class) @SpringBootTest (svojstva = {"example.firstProperty = annotation"}) javna klasa SpringBootPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test javna praznina shouldSpringBootTestAnnotation_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Niz secondProperty = propertySourceResolver.getSecondProperty (); Assert.assertEquals ("napomena", firstProperty); Assert.assertEquals ("defaultSecond", secondProperty); }}

Kao što vidimo,the primjer.prva nekretnina je nadjačana dok je primjer.secondProperty nije bio. Stoga je ovo izvrsno rješenje kada za test moramo nadjačati samo određena svojstva. Ovo je jedina metoda koja zahtijeva upotrebu Spring Boota.

7. TestPropertySourceUtils

U ovom ćemo odjeljku naučiti kako nadjačati svojstva pomoću TestPropertySourceUtils razred u ApplicationContextInitializer.

The TestPropertySourceUtils dolazi s dvije metode koje možemo koristiti za definiranje različite vrijednosti svojstva.

Stvorimo klasu inicijalizatora koju ćemo koristiti u našem testu:

javna klasa PropertyOverrideContextInitializer implementira ApplicationContextInitializer {static final String PROPERTY_FIRST_VALUE = "contextClass"; @Override javna void inicijalizacija (ConfigurableApplicationContext configurableApplicationContext) {TestPropertySourceUtils.addInlinedPropertiesToEnvironment (configurableApplicationContext, "example.firstProperty =" + PROPERTY_FIRST_VALUE) TestPropertySourceUtils.addPropertiesFilesToEnvironment (configurableApplicationContext, "context-override-application.properties"); }}

Dalje ćemo dodati context-override-application.properties uloži u src / test / resources:

primjer.secondProperty = contextFile

Konačno, trebali bismo stvoriti test klasu koja će koristiti naš inicijalizator:

@RunWith (SpringRunner.class) @ContextConfiguration (inicijalizatori = PropertyOverrideContextInitializer.class, classes = Application.class) javna klasa ContextPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test javna praznina shouldContext_overridePropertyValues ​​() {final String firstProperty = propertySourceResolver.getFirstProperty (); završni niz secondProperty = propertySourceResolver.getSecondProperty (); assertEquals (PropertyOverrideContextInitializer.PROPERTY_FIRST_VALUE, firstProperty); assertEquals ("contextFile", secondProperty); }}

The primjer.prva nekretnina je poništeno iz ucrtane metode.

The primjer.secondProperty je nadjačan iz određene datoteke u drugoj metodi. Ovaj nam pristup omogućuje definiranje različitih vrijednosti svojstava prilikom inicijalizacije konteksta.

8. Zaključak

U ovom uputstvu usredotočili smo se na više načina na koje možemo nadjačati svojstva u našim testovima.

Također smo otkrili kada koristiti svaku otopinu ili u nekim slučajevima kada ih miješati.

Mi, naravno, imamo @TestPropertySource napomena koja nam je na raspolaganju.

Kao i uvijek, kod za primjere dostupan je na GitHubu.


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