Mockito gúnyok injektálása a tavaszi babba

1. Áttekintés

Ebben a cikkben bemutatjuk, hogyan lehet a függőségi injekciót használni a Mockito gúnyok beillesztésére a Spring Beans-ba az egység teszteléséhez.

A valós alkalmazásokban, ahol az összetevők gyakran a külső rendszerek elérésétől függenek, fontos a megfelelő tesztelkülönítés biztosítása, hogy az adott egység funkcionalitásának tesztelésére összpontosíthassunk anélkül, hogy az egyes tesztekhez a teljes osztályhierarchiát kellene bevonnunk.

Az ál beadása tiszta módszer az ilyen elszigeteltség bevezetésére.

2. Maven-függőségek

A következő Maven-függőségekre van szükségünk az egységtesztekhez és az álobjektumokhoz:

 org.springframework.boot spring-boot-starter 2.2.2.RELEASE org.springframework.boot spring-boot-starter-test 2.2.2.RELEASE teszt org.mockito mockito-core 2.21.0 

Úgy döntöttünk, hogy a Spring Boot alkalmazást használjuk erre a példára, de a klasszikus Spring is jól fog működni.

3. A teszt megírása

3.1. Az üzleti logika

Először hozzunk létre egy egyszerű szolgáltatást, amelyet tesztelni fogunk:

@Service public class NameService {public String getUserName (String id) {return "Valódi felhasználónév"; }}

És fecskendezze be a UserService osztály:

@Service public class UserService {private NameService nameService; @Autowired public UserService (NameService nameService) {this.nameService = névSzolgáltatás; } public String getUserName (String id) {return nameService.getUserName (id); }}

Ehhez az oktatóanyaghoz az adott osztályok egyetlen nevet adnak vissza, függetlenül a megadott azonosítótól. Ez azért történik, hogy ne zavarjanak minket a komplex logikák tesztelése.

Szükségünk lesz egy standard Spring Boot főosztályra is a bab beolvasásához és az alkalmazás inicializálásához:

@SpringBootApplication public class MocksApplication {public static void main (String [] args) {SpringApplication.run (MocksApplication.class, args); }}

3.2. A tesztek

Most térjünk át a tesztlogikára. Először is konfigurálnunk kell az alkalmazás környezetét a tesztekhez:

@Profile ("test") @Configuration public class NameServiceTestConfiguration {@Bean @Primary public NameService nameService () {return Mockito.mock (NameService.class); }}

A @Profil az annotáció azt mondja Springnek, hogy csak akkor használja ezt a konfigurációt, ha a „teszt” profil aktív. A @Elsődleges az annotáció azért van, hogy megbizonyosodjon arról, hogy ezt a példányt használják a valódi helyett az automatikus vezetéshez. Maga a módszer létrehozza és visszaadja egy Mockito-gúnyt NameService osztály.

Most megírhatjuk az egység tesztet:

@ActiveProfiles ("teszt") @RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (class = MocksApplication.class) public class UserServiceUnitTest {@Autowired private UserService userService; @Autowired private NameService nameService; @Test public void whenUserIdIsProvided_thenRetrievedNameIsCorrect () {Mockito.when (nameService.getUserName ("SomeId")). ThenReturn ("Mock user name"); Karakterlánc tesztnév = userService.getUserName ("SomeId"); Assert.assertEquals ("Modell felhasználónév", tesztNév); }}

Használjuk a @ActiveProfiles annotáció a „teszt” profil engedélyezéséhez és az előbb írt álkonfiguráció aktiválásához. Emiatt Spring automatikusan bekapcsolja a UserService osztály, de a NameService osztály. Maga a teszt meglehetősen tipikus JUnit + Mockito teszt. Konfiguráljuk az ál kívánt viselkedését, majd meghívjuk a tesztelni kívánt módszert, és állítjuk, hogy az adja vissza az elvárt értéket.

Az is lehetséges (bár nem ajánlott), hogy elkerülje a környezeti profilok használatát az ilyen tesztekben. Ehhez távolítsa el a @Profile és @ActiveProfiles megjegyzéseket és adjon hozzá egy @ContextConfiguration (osztályok = NameServiceTestConfiguration.class) jegyzet a UserServiceTest osztály.

4. Következtetés

Ebben a gyors bemutatóban megmutattuk, milyen egyszerű a Mockito gúnyokat beadni a tavaszi babba.

Szokás szerint az összes kódminta elérhető a GitHubon.


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