Mockito és JUnit 5 - Az ExtendWith használata

1. Bemutatkozás

Ebben a gyors cikkben megmutatjuk hogyan integrálható a Mockito a JUnit 5 kiterjesztésű modellel. Ha többet szeretne megtudni a JUnit 5 kiterjesztési modellről, tekintse meg ezt a cikket.

Először bemutatjuk, hogyan hozhatunk létre olyan kiterjesztést, amely automatikusan létrehoz egy álobjektumot bármely osztály attribútumhoz vagy @Mock.

Ezután a Mockito kiterjesztést egy JUnit 5 tesztórán fogjuk használni.

2. Maven-függőségek

2.1. Szükséges függőségek

Adjuk hozzá a JUnit 5 (jupiter) és mockito függőségek a mi pom.xml:

 org.junit.jupiter junit-jupiter-engine 5.3.1 teszt org.mockito mockito-core 2.21.0 teszt 

Vegye figyelembe, hogy junit-jupiter-motor a fő JUnit 5 könyvtár, és junit-platform-launcher a Maven pluginnel és az IDE indítóval együtt használható.

2.2. Surefire bővítmény

Konfiguráljuk a Maven Surefire plugint is, hogy az új JUnit platformindító segítségével futtassuk tesztosztályainkat:

 maven-surefire-plugin 2.19.1. org.junit.platform junit-platform-surefire-szolgáltató 1.0.1 

2.3. JUnit 4 IDE kompatibilitási függőségek

Ahhoz, hogy teszteseteink JUnit4 (vintage) kompatibilisek legyenek, az IDE-k számára, amelyek még nem támogatják a JUnit 5-et, tegyük bele ezeket a függőségeket:

 org.junit.platform junit-platform-runner 1.2.0 teszt org.junit.vintage junit-vintage-engine 5.2.0 teszt 

Fontolóra kell vennünk az összes tesztosztályunknak a jelölését @RunWith (JUnitPlatform.class)

A legújabb verziói junit-jupiter-motor, junit-vintage-motor, junit-platform-launcher, és mockito-core letölthető a Maven Central oldalról.

3. Mockito kiterjesztés

Mockito megvalósítást nyújt a JUnit5 kiterjesztésekhez a könyvtárban - mockito-junit-jupiter. Ezt a függőséget felvesszük a pom.xml:

 org.mockito mockito-junit-jupiter 2.23.0 teszt 

4. A tesztosztály kiépítése

Építsük meg tesztosztályunkat, és csatoljuk hozzá a Mockito kiterjesztést:

@ExtendWith (MockitoExtension.class) @RunWith (JUnitPlatform.class) public class UserServiceUnitTest {UserService userService; ... //}

Használhatjuk a @Mock annotáció egy álváltozó bejuttatásához, amelyet a tesztosztályban bárhol használhatunk:

@Mock UserRepository userRepository;

Injektálhatunk modell objektumokat a módszer paramétereibe:

@BeforeEach void init (@Mock SettingRepository settingRepository) {userService = új DefaultUserService (userRepository, settingRepository, mailClient); Mockito.lenient (). When (settingRepository.getUserMinAge ()). ThenReturn (10); mikor (settingRepository.getUserNameMinLength ()). thenReturn (4); Mockito.lenient () .when (userRepository.isUsernameAlreadyExists (any (String.class))) .thenReturn (false); }

Kérjük, vegye figyelembe a Mockito.lenient () itt. Mockito dob egy UnsupportedStubbingException, amikor a végrehajtás során az inicializált gúnyt nem hívják meg az egyik vizsgálati módszerrel. Ezt a szigorú csonkellenőrzést elkerülhetjük, ha ezzel a módszerrel inicializáljuk az álokat.

Injektálhatunk egy próbatestet is egy vizsgálati módszer paraméterébe:

@Test void givenValidUser_whenSaveUser_thenSucceed (@Mock MailClient mailClient) {// Adott felhasználó = új felhasználó ("Jerry", 12); mikor ); user.setId (szekvencia ++); visszatérő felhasználó;}}); userService = új DefaultUserService (userRepository, settingRepository, mailClient); // Amikor a felhasználó beillesztetteUser = userService.register (user); // Ezután ellenőrizze (userRepository) .insert (user); Assertions.assertNotNull (user.getId ()); ellenőrizze (mailClient) .sendUserRegistrationMail (insertUser); }

Vegye figyelembe, hogy a MailClient az a gúny, amelyet tesztparaméterként injektálunk, NEM lesz ugyanaz, mint amelyet a benne módszer.

5. Következtetés

A Junit 5 egy szép modellt nyújtott a bővítéshez. Bemutattunk egy egyszerű Mockito kiterjesztést, amely leegyszerűsítette a modell létrehozásának logikáját.

A cikkben használt összes kód megtalálható a com.baeldung.junit5.mockito a GitHub projekt csomagja, néhány további egységteszt módszerrel együtt.