A tavaszi tesztek tulajdonságainak felülbírálása

1. Áttekintés

Ebben az oktatóanyagban a tulajdonságok felülbírálásának különböző módjait vesszük szemügyre Spring tesztjeiben.

A tavasz erre valójában számos megoldást kínál, ezért itt elég sokat kell felfedeznünk.

2. Függőségek

Természetesen ahhoz, hogy tavaszi tesztekkel dolgozzunk, hozzá kell adnunk egy tesztfüggőséget:

 org.springframework.boot spring-boot-starter-test 2.1.6.KÖZLÍTÉSI teszt 

A tavasz-csomagtartó-indító-teszt A függőség mindent tartalmaz, amire szükségünk van a tulajdonságok értékének felülbírálásához a tesztekben.

3. Beállítás

Először létre kell hoznunk egy osztályt az alkalmazásban, amely a tulajdonságainkat használja:

@Component public class PropertySourceResolver {@Value ("$ {example.firstProperty}") private String firstProperty; @Value ("$ {example.secondProperty}") privát karakterlánc secondProperty; public String getFirstProperty () {return firstProperty; } public String getSecondProperty () {return secondProperty; }}

Ezután rendeljünk hozzájuk értékeket. Megtehetjük a alkalmazás.tulajdonságok ban,-ben src / main / resources:

example.firstProperty = defaultFirst example.secondProperty = defaultSecond

4. A tulajdonságfájl felülírása

Most felülírjuk a tulajdonságokat azáltal, hogy a tulajdonságfájlt betesszük a teszt erőforrásokba. Ennek a fájlnak kell lennieugyanazon az osztályúton mint alapértelmezett.

Ezenkívül meg kell tartalmazza az összes tulajdonságkulcsot az alapértelmezett fájlban van megadva. Ezért hozzáadjuk a alkalmazás.tulajdonságok fájlt a src / test / resources:

example.firstProperty = fájl example.secondProperty = fájl

Adjunk hozzá egy tesztet is, amely kihasználja a megoldásunkat:

@RunWith (SpringRunner.class) @SpringBootTest nyilvános osztály TestResourcePropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test public void shouldTestResourceFile_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); String secondProperty = propertySourceResolver.getSecondProperty (); assertEquals ("fájl", firstProperty); assertEquals ("fájl", secondProperty); }}

Ez a módszer nagyon hatékony, ha több tulajdonságot felül akarunk írni a fájlból.

És ha nem tennénk a példa.secondProperty a fájlban az alkalmazás kontextusa nem fedezi fel ezt a tulajdonságot.

5. Tavaszi profilok

Ebben a szakaszban megtudhatjuk, hogyan kell kezelni a problémát a tavaszi profilok használatával. Az előző módszerrel ellentétbenez egyesíti az alapértelmezett és a profilos fájl tulajdonságait.

Először hozzunk létre egy Alkalmazásteszt.tulajdonságok fájl a src / test / resources:

példa.firstProperty = profil

Ezt követően létrehozunk egy tesztet, amely a teszt profil:

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

Ez a megközelítés lehetővé teszi számunkra az alapértelmezett és a tesztértékek használatát. Ezért ez egy nagyszerű módszer, amikor szükségünk van rá több tulajdonságot felülír egy fájlból, de továbbra is az alapértelmezettet akarjuk használni azok.

Ezenkívül többet tudhat meg a tavaszi profilokról Tavaszi profilok bemutató.

6. @SpringBootTest

A tulajdonság értékének felülbírálásának másik módja a @SpringBootTest kommentár:

@RunWith (SpringRunner.class) @SpringBootTest (tulajdonságok = {"example.firstProperty = annotation"}) nyilvános osztály SpringBootPropertySourceResolverIntegrationTest {@Autowired private PropertySourceResolver propertySourceResolver; @Test public void shouldSpringBootTestAnnotation_overridePropertyValues ​​() {String firstProperty = propertySourceResolver.getFirstProperty (); String secondProperty = propertySourceResolver.getSecondProperty (); Assert.assertEquals ("annotáció", firstProperty); Assert.assertEquals ("defaultSecond", secondProperty); }}

Ahogy látjuk,a példa.firstProperty felülbírálták, míg a példa.secondProperty nem volt. Ezért ez egy nagyszerű megoldás, amikor a tesztnek csak bizonyos tulajdonságait kell felülírnunk. Ez az egyetlen módszer, amely megköveteli a Spring Boot használatát.

7. TestPropertySourceUtils

Ebben a szakaszban megtudhatjuk, hogyan lehet felülírni a tulajdonságokat a TestPropertySourceUtils osztály a ApplicationContextInitializer.

A TestPropertySourceUtils kétféle módszerrel érkezik, amelyekkel meghatározhatunk egy másik tulajdonságértéket.

Hozzunk létre egy inicializáló osztályt, amelyet a tesztünkben használunk:

public class PropertyOverrideContextInitializer végrehajtja az ApplicationContextInitializer {static final String PROPERTY_FIRST_VALUE = "contextClass"; @Override public void inicializálás (ConfigurableApplicationContext configurableApplicationContext) {TestPropertySourceUtils.addInlinedPropertiesToEnvironment (configurableApplicationContext, "example.firstProperty =" + PROPERTY_FIRST_VALUE); TestPropertySourceUtils.addPropertiesFilesToEnvironment (configurableApplicationContext, "context-override-application.properties"); }}

Ezután hozzáadjuk a context-override-application.properties fájlba src / test / resources:

példa.secondProperty = contextFile

Végül létre kell hoznunk egy tesztosztályt, amely az inicializálónkat használja:

@RunWith (SpringRunner.class) @ContextConfiguration (inicializátorok = PropertyOverrideContextInitializer.class, class = Application.class) nyilvános osztály 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); }}

A példa.firstProperty a beillesztett módszerből felül lett írva.

A példa.secondProperty a második módszer felülírta az adott fájlból. Ez a megközelítés lehetővé teszi számunkra a különböző tulajdonságértékek meghatározását a kontextus inicializálásakor.

8. Következtetés

Ebben az oktatóanyagban arra a különböző módokra összpontosítottunk, amelyekkel tesztjeink során felülírhatjuk a tulajdonságokat.

Azt is felfedeztük, hogy mikor kell használni az egyes megoldásokat, vagy egyes esetekben mikor kell keverni őket.

Természetesen megvan a @TestPropertySource a rendelkezésünkre álló feliratozás is.

Mint mindig, a példák kódja elérhető a GitHubon.