Mockito i JUnit 5 - Korištenje ExtendWith

1. Uvod

U ovom ćemo kratkom članku pokazati kako integrirati Mockito s modelom produženja JUnit 5. Da biste saznali više o modelu produženja JUnit 5, pogledajte ovaj članak.

Prvo ćemo pokazati kako stvoriti proširenje koje automatski stvara lažne objekte za bilo koji atribut klase ili parametar metode označen s @Oponašanje.

Zatim ćemo upotrijebiti naše Mockito proširenje u testnoj klasi JUnit 5.

2. Ovisnosti Mavena

2.1. Potrebne ovisnosti

Dodajmo JUnit 5 (jupiter) i mockito ovisnosti o našim pom.xml:

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

Imajte na umu da junit-jupiter-motor je glavna knjižnica JUnit 5 i junit-platforma-lanser koristi se s Maven dodatkom i IDE pokretačem.

2.2. Dodatak Surefire

Konfigurirajmo i dodatak Maven Surefire za pokretanje naših test klasa pomoću novog pokretača platforme JUnit:

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

2.3. Ovisnosti o kompatibilnosti JUnit 4 IDE

Da bi naši test slučajevi bili kompatibilni s JUnit4 (berba), za IDE-ove koji još nemaju podršku za JUnit 5, uključimo ove ovisnosti:

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

Također, trebali bismo razmotriti dodavanje bilješki na sve naše ispitne satove @RunWith (JUnitPlatform.class)

Najnovije verzije junit-jupiter-motor, junit-vintage-motor, junit-platforma-lanser, i mockito-core može se preuzeti s Maven Central.

3. Mockito proširenje

Mockito pruža implementaciju za JUnit5 proširenja u knjižnici - mockito-junit-jupiter. Uključit ćemo ovu ovisnost u našu pom.xml:

 org.mockito mockito-junit-jupiter 2.23.0 test 

4. Izgradnja test klase

Izgradimo našu testnu klasu i na nju prikačimo proširenje Mockito:

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

Možemo koristiti @Oponašanje napomena za ubrizgavanje lažne slike za varijablu instance koju možemo koristiti bilo gdje u testnoj klasi:

@Mock UserRepository userRepository;

Također, možemo ubrizgati lažne objekte u parametre metode:

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

Imajte na umu upotrebu Mockito.lenient () ovdje. Mockito baca an UnsupportedStubbingException, kada se tijekom pokretanja jednom od metoda ispitivanja ne pozove inicijalizirano lažno predstavljanje. Ovu strogu provjeru kvara možemo izbjeći korištenjem ove metode prilikom inicijalizacije lažiranja.

Čak možemo ubrizgati lažni objekt u parametar metode ispitivanja:

@Test void givenValidUser_whenSaveUser_thenSucceed (@Mock MailClient mailClient) {// Dati korisnik = novi korisnik ("Jerry", 12); kada (userRepository.insert (bilo koji (User.class))). tada (new Answer () {int sequence = 1; @Override javni korisnički odgovor (InvocationOnMock invocation) baca mogućnost bacanja {User user = (User) invocation.getArgument (0) ); user.setId (slijed ++); vratiti korisnika;}}); userService = novi DefaultUserService (userRepository, settingRepository, mailClient); // Kad je korisnik umetnuoUser = userService.register (korisnik); // Zatim provjeri (userRepository) .insert (user); Assertions.assertNotNull (user.getId ()); provjeriti (mailClient) .sendUserRegistrationMail (insertUser); }

Imajte na umu da MailClient ismijavanje da ubrizgavamo kao testni parametar NEĆE biti ista instanca koju smo ubrizgali u u tome metoda.

5. Zaključak

Junit 5 pružio je lijep model za produženje. Demonstrirali smo jednostavno Mockito proširenje koje je pojednostavilo našu logiku stvaranja lažnih podataka.

Sav kôd korišten u ovom članku može se naći u com.baeldung.junit5.mockito paket GitHub projekta, zajedno s nekoliko dodatnih metoda jedinstvenog testiranja.


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