Mockito a JUnit 5 - pomocou aplikácie ExtendWith

1. Úvod

V tomto rýchlom článku si ukážeme ako integrovať Mockito s rozširujúcim modelom JUnit 5. Ak sa chcete dozvedieť viac informácií o rozšírení modelu JUnit 5, pozrite si tento článok.

Najskôr si ukážeme, ako vytvoriť rozšírenie, ktoré automaticky vytvorí falošné objekty pre akýkoľvek atribút triedy alebo parameter metódy anotovaný pomocou @Mock.

Potom použijeme naše rozšírenie Mockito v testovacej triede JUnit 5.

2. Maven závislosti

2.1. Požadované závislosti

Pridajme JUnit 5 (jupiter) a mockito závislosti na naše pom.xml:

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

Poznač si to junit-jupiter-motor je hlavná knižnica JUnit 5 a launcher platformy junit sa používa s doplnkom Maven a spúšťačom IDE.

2.2. Plugin Surefire

Konfigurujme tiež doplnok Maven Surefire na vykonávanie testovacích tried pomocou nového spúšťača platformy JUnit:

 maven-surefire-plugin 2.19.1 org.junit.platform junit-platform-surefire-provider 1.0.1 

2.3. Závislosti kompatibility JUnit 4 IDE

Aby boli naše testovacie prípady kompatibilné s JUnit4 (ročník), pre IDE, ktoré zatiaľ nepodporujú JUnit 5, zahrňme tieto závislosti:

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

Mali by sme tiež zvážiť anotáciu všetkých našich testovacích tried pomocou @RunWith (JUnitPlatform.class)

Najnovšie verzie servera junit-jupiter-motor, junit-vintage-engine, launcher platformy junita mockito-jadro je možné stiahnuť z Maven Central.

3. Mockito rozšírenie

Mockito poskytuje implementáciu rozšírení JUnit5 v knižnici - mockito-junit-jupiter. Túto závislosť zahrnieme do našej pom.xml:

 org.mockito test mockito-junit-jupiter 2.23.0 

4. Budovanie testovacej triedy

Vytvorme našu testovaciu triedu a pripojme k nej rozšírenie Mockito:

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

Môžeme použiť @Mock anotácia, aby sa vložil falošný príklad pre inštančnú premennú, ktorú môžeme použiť kdekoľvek v testovacej triede:

@Mock UserRepository userRepository;

Tiež môžeme vložiť falošné objekty do parametrov metódy:

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

Vezmite prosím na vedomie použitie Mockito.lenient () tu. Mockito hodí UnsupportedStubbingException, keď počas vykonávania nie je vyvolaná inicializovaná simulácia jednou z testovacích metód. Tejto prísnej kontrole útržkov sa môžeme vyhnúť použitím tejto metódy pri inicializácii falošných správ.

Do parametra testovacej metódy môžeme dokonca vložiť falošný objekt:

@Test void givenValidUser_whenSaveUser_thenSucceed (@Mock MailClient mailClient) {// Zadaný používateľ = nový používateľ ("Jerry", 12); when (userRepository.insert (any (User.class))). then (new Answer () {int sequence = 1; @Override public User answer (InvocationOnMock invcation) throws Throwable {User user = (User) invocation.getArgument (0 ); user.setId (sekvencia ++); návratový používateľ;}}); userService = nový DefaultUserService (userRepository, settingRepository, mailClient); // Keď je vložený používateľUser = userService.register (užívateľ); // Potom overíme (userRepository). Vložiť (užívateľ); Assertions.assertNotNull (user.getId ()); verify (mailClient) .sendUserRegistrationMail (vloženýUžívateľ); }

Všimnite si, že MailClient vysmievanie, ktoré vložíme ako testovací parameter, NEBUDE rovnakou inštanciou, ktorú sme vložili do súboru init metóda.

5. Záver

Junit 5 poskytol pekný model rozšírenia. Predviedli sme jednoduché rozšírenie Mockito, ktoré zjednodušilo našu simulovanú logiku vytvárania.

Všetky kódy použité v tomto článku nájdete v com.baeldung.junit5.mockito balíček projektu GitHub spolu s niekoľkými ďalšími metódami testovania jednotiek.


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