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.