Mockito.mock () vs @Mock vs @MockBean

1. Prehľad

V tomto rýchlom výučbe sa pozrieme na tri rôzne spôsoby vytvárania falošných objektov a na to, ako sa navzájom líšia - pomocou Mockita a falošnej podpory Spring.

2. Mockito.mock ()

The Mockito.mock () metóda nám umožňuje vytvoriť simulovaný objekt triedy alebo rozhrania.

Potom môžeme použiť falošný prostriedok na vyradenie návratových hodnôt pre jeho metódy a overenie, či boli volané.

Pozrime sa na príklad:

@Test public void 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 (); }

Pred použitím tejto metódy nie je potrebné robiť nič iné. Môžeme ho použiť na vytvorenie falošných polí triedy aj miestnych falošných metód.

3. Mockito @Mock Anotácia

Táto anotácia je skratkou pre výraz Mockito.mock () metóda. Rovnako by sme ho mali používať iba v testovacej triede. Na rozdiel od falošný () Ak chcete použiť túto metódu, musíme povoliť Mockitovým anotáciám.

Môžeme to urobiť buď pomocou MockitoJUnitRunner na vykonanie testu alebo volanie na server MockitoAnnotations.initMocks () metóda výslovne.

Pozrime sa na príklad pomocou MockitoJUnitRunner:

@RunWith (MockitoJUnitRunner.class) verejná trieda MockAnnotationUnitTest {@Mock UserRepository mockRepository; @Test public void givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned () {Mockito.when (mockRepository.count ()). ThenReturn (123L); long userCount = mockRepository.count (); Assert.assertEquals (123L, userCount); Mockito.verify (mockRepository) .count (); }}

Okrem lepšej čitateľnosti kódu @Mock uľahčuje nájdenie falošného problému v prípade zlyhania, pretože v hlásení o chybe sa zobrazuje názov poľa:

Chcel, ale nebol vyvolaný: mockRepository.count (); -> na org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) V skutočnosti s týmto falošným programom dochádzalo k nulovým interakciám. na org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) 

Tiež pri použití v spojení s @InjectMocks, môže to výrazne znížiť množstvo nastavovacieho kódu.

4. Jarné čižmy @MockBean Anotácia

Môžeme použiť @MockBean pridať falošné objekty do kontextu aplikácie Spring. Falošný program nahradí všetky existujúce fazule rovnakého typu v kontexte aplikácie.

Ak nie je definovaná žiadna fazuľa rovnakého typu, pridá sa nová. Táto anotácia je užitočná pri integračných testoch, kde je potrebné zosmiešňovať konkrétnu fazuľu - napríklad externú službu.

Ak chcete použiť túto anotáciu, musíme použiť SpringRunner na vykonanie testu:

@RunWith (SpringRunner.class) verejná trieda MockBeanAnnotationIntegrationTest {@MockBean UserRepository mockRepository; @Autowired ApplicationContext kontext; @Test public void 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 (); }}

Keď na pole použijeme anotáciu a zároveň sme zaregistrovaní v kontexte aplikácie, do poľa sa vloží aj falošný test.

To je zrejmé z vyššie uvedeného kódu. Tu sme použili injekciu UserRepository predstieraný pahýľ počítať metóda. Potom sme použili fazuľu z kontextu aplikácie na overenie, či ide skutočne o zosmiešnenú fazuľu.

5. Záver

V tomto článku sme videli, ako sa líšia tri metódy vytvárania simulovaných objektov a ako je možné ich použiť.

Zdrojový kód, ktorý je priložený k tomuto článku, je k dispozícii na serveri GitHub.


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