Prepísať vlastnosti v jarných testoch

1. Prehľad

V tomto výučbe sa pozrieme na rôzne spôsoby prepísania vlastností v jarných testoch.

Jar na to v skutočnosti poskytuje množstvo riešení, takže tu musíme toho ešte dosť preskúmať.

2. Závislosti

Samozrejme, aby sme mohli pracovať s jarnými testami, musíme pridať závislosť testu:

 org.springframework.boot test Spring-Boot-Starter-Test 2.1.6. Test UVOĽNENIA 

The test štartovacej pružiny závislosť obsahuje všetko, čo potrebujeme na prepísanie hodnoty vlastnosti v testoch.

3. Inštalácia

Najskôr budeme musieť v aplikácii vytvoriť triedu, ktorá bude využívať naše vlastnosti:

@ Komponenta verejná trieda PropertySourceResolver {@Value ("$ {example.firstProperty}") súkromný reťazec firstProperty; @Value ("$ {example.secondProperty}") private String secondProperty; public String getFirstProperty () {return firstProperty; } public String getSecondProperty () {return secondProperty; }}

Ďalej im priradíme hodnoty. Môžeme to urobiť vytvorením application.properties v src / main / resources:

example.firstProperty = defaultFirst example.secondProperty = defaultSecond

4. Prepísanie súboru vlastností

Teraz prepíšeme vlastnosti vložením súboru vlastností do testovacích prostriedkov. Tento súbor musí byťna tej istej triednej ceste ako predvolený.

Dodatočne by malo obsahovať všetky kľúče vlastnosti zadané v predvolenom súbore. Preto pridáme application.properties súbor do src / test / zdroje:

example.firstProperty = súbor example.secondProperty = súbor

Pridajme tiež test, ktorý využije naše riešenie:

@RunWith (SpringRunner.class) @SpringBootTest verejná trieda TestResourcePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test public void shouldTestResourceFile_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Reťazec secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("file", firstProperty); assertEquals ("súbor", secondProperty); }}

Táto metóda je veľmi efektívna, keď chceme prepísať viac vlastností zo súboru.

A ak sme nedali example.secondProperty v súbore by kontext aplikácie nezistil túto vlastnosť.

5. Jarné profily

V tejto časti sa dozvieme, ako riešiť náš problém pomocou jarných profilov. Na rozdiel od predchádzajúcej metódytento zlučuje vlastnosti z predvoleného súboru a profilovaného súboru.

Najprv si vytvorme žiadosťtest.vlastnosti súbor v src / test / zdroje:

example.firstProperty = profil

Potom vytvoríme test, ktorý bude používať test profil:

@RunWith (SpringRunner.class) @SpringBootTest @ActiveProfiles ("test") verejná trieda ProfilePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test public void shouldProfiledProperty_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Reťazec secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("profil", firstProperty); assertEquals ("defaultSecond", secondProperty); }}

Tento prístup nám umožňuje používať predvolené aj testovacie hodnoty. Preto je to skvelá metóda, keď potrebujeme prepísať viac vlastností zo súboru, ale stále chceme použiť predvolené tie.

Ďalej sa môžeme dozvedieť viac o jarných profiloch v našom Jarné profily návod.

6. @SpringBootTest

Ďalším spôsobom, ako prepísať hodnotu vlastnosti, je použitie @SpringBootTest anotácia:

@RunWith (SpringRunner.class) @SpringBootTest (properties = {"example.firstProperty = anotácia"}) verejná trieda SpringBootPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test public void shouldSpringBootTestAnnotation_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); Reťazec secondProperty = propertySourceResolver.getSecondProperty (); Assert.assertEquals ("anotácia", firstProperty); Assert.assertEquals ("defaultSecond", secondProperty); }}

Ako vidíme,the príklad.prvé vlastníctvo bol prepísaný, kým example.secondProperty nebol. Preto je to skvelé riešenie, keď potrebujeme prepísať iba špecifické vlastnosti testu. Toto je jediná metóda, ktorá vyžaduje použitie Spring Boot.

7. TestPropertySourceUtils

V tejto časti sa dozvieme, ako prepísať vlastnosti pomocou TestPropertySourceUtils trieda v ApplicationContextInitializer.

The TestPropertySourceUtils prichádza s dvoma metódami, ktoré môžeme použiť na definovanie inej hodnoty vlastnosti.

Vytvorme triedu inicializátora, ktorú použijeme v našom teste:

verejná trieda PropertyOverrideContextInitializer implementuje ApplicationContextInitializer {statický konečný reťazec 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"); }}

Ďalej pridáme context-override-application.properties vložiť do src / test / zdroje:

example.secondProperty = contextFile

Nakoniec by sme mali vytvoriť testovaciu triedu, ktorá bude používať náš inicializátor:

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

The príklad.prvé vlastníctvo bol prepísaný vloženou metódou.

The example.secondProperty v druhej metóde bol prepísaný z konkrétneho súboru. Tento prístup nám umožňuje definovať rôzne hodnoty vlastností pri inicializácii kontextu.

8. Záver

V tomto tutoriáli sme sa zamerali na viac spôsobov, ktoré môžeme použiť na prepísanie vlastností v našich testoch.

Tiež sme zistili, kedy použiť každé riešenie alebo v niektorých prípadoch ich zmiešať.

My samozrejme máme @TestPropertySource tiež máme k dispozícii anotáciu.

Ako vždy, kód príkladov je k dispozícii na GitHub.


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