Mockito.mock () vs @Mock vs @MockBean

1. Pregled

U ovom ćemo brzom vodiču pogledati tri različita načina stvaranja lažnih objekata i kako se oni međusobno razlikuju - s Mockitom i s podrškom za proljetno proljeće.

2. Mockito.mock ()

The Mockito.mock () metoda omogućuje nam stvaranje lažnog objekta klase ili sučelja.

Zatim možemo koristiti mock za umetanje povratnih vrijednosti za svoje metode i provjeriti jesu li pozvane.

Pogledajmo primjer:

@Test javna praznina givenCountMethodMocked_WhenCountInvoked_ThenMockedValueReturned () {UserRepository localMockRepository = Mockito.mock (UserRepository.class); Mockito.when (localMockRepository.count ()). ThenReturn (111L); long userCount = localMockRepository.count (); Assert.assertEquals (111L, userCount); Mockito.verify (localMockRepository) .count (); }

Ovoj metodi nije potrebno učiniti ništa drugo prije nego što se može upotrijebiti. Pomoću njega možemo stvoriti lažna polja klase, kao i lokalna lažna predstavljanja u metodi.

3. Mockitova @Oponašanje Bilješka

Ova je napomena skraćenica za Mockito.mock () metoda. Isto tako, trebali bismo ga koristiti samo u testnoj klasi. Za razliku od oponašanje() metodu, moramo omogućiti Mockito bilješkama da koriste ovu bilješku.

To možemo učiniti pomoću MockitoJUnitRunner za pokretanje testa ili pozivanje MockitoAnnotations.initMocks () metoda eksplicitno.

Pogledajmo primjer pomoću MockitoJUnitRunner:

@RunWith (MockitoJUnitRunner.class) javna klasa MockAnnotationUnitTest {@Mock UserRepository mockRepository; @Test javna praznina givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned () {Mockito.when (mockRepository.count ()). ThenReturn (123L); long userCount = mockRepository.count (); Assert.assertEquals (123L, userCount); Mockito.verify (mockRepository) .count (); }}

Osim što čini kôd čitljivijim, @Oponašanje olakšava pronalaženje problema u slučaju kvara, jer se ime polja pojavljuje u poruci o neuspjehu:

Traži se, ali se na njega ne poziva: mockRepository.count (); -> na org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) Zapravo nije bilo nula interakcija s ovom lažom. na org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) 

Također, kada se koristi zajedno s @InjectMocks, može značajno smanjiti količinu postavnog koda.

4. Proljetne čizme @MockBean Bilješka

Možemo koristiti @MockBean za dodavanje lažnih objekata u kontekst aplikacije Spring. Ismijavanje će zamijeniti bilo koji postojeći grah iste vrste u kontekstu aplikacije.

Ako nije definiran nijedan grah iste vrste, dodat će se novi. Ova je napomena korisna u integracijskim testovima gdje se određeni grah - na primjer, vanjska usluga - mora rugati.

Da bismo koristili ovu napomenu, moramo koristiti SpringRunner za pokretanje testa:

@RunWith (SpringRunner.class) javna klasa MockBeanAnnotationIntegrationTest {@MockBean UserRepository mockRepository; @Autowired ApplicationContext context; @Test javna praznina givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned () {Mockito.when (mockRepository.count ()). ThenReturn (123L); UserRepository userRepoFromContext = context.getBean (UserRepository.class); long userCount = userRepoFromContext.count (); Assert.assertEquals (123L, userCount); Mockito.verify (mockRepository) .count (); }}

Kada koristimo napomenu na polju, kao i kada smo registrirani u kontekstu aplikacije, lažna slika također će se ubrizgati u polje.

To je vidljivo iz gornjeg koda. Ovdje smo koristili ubrizgano UserRepository izrugivati ​​se da bi okrznuo računati metoda. Zatim smo koristili grah iz konteksta aplikacije kako bismo provjerili je li to zaista ismijani grah.

5. Zaključak

U ovom smo članku vidjeli kako se razlikuju tri metode za stvaranje lažnih predmeta i kako se svaka od njih može koristiti.

Izvorni kod koji prati ovaj članak dostupan je na GitHubu.