Mockito.mock () vs @Mock vs @MockBean

1. Áttekintés

Ebben a gyors bemutatóban megvizsgáljuk a gúnyobjektumok létrehozásának három különböző módját, és azok különbségét egymástól - a Mockito és a Spring gúnyos támogatással.

2. Mockito.mock ()

A Mockito.mock () A módszer lehetővé teszi számunkra, hogy létrehozzunk egy osztály vagy egy felület modell objektumát.

Ezután felhasználhatjuk a modellt, hogy megadjuk a módszerhez tartozó értékeket, és ellenőrizzük, hogy hívták-e őket.

Nézzünk meg egy példát:

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

Ez a módszer nem igényel mást, mielőtt alkalmazható lenne. Használhatjuk úgy, hogy egy módszerben modell-mezőket, valamint helyi gúnyokat hozzunk létre.

3. Mockito's @Mock Megjegyzés

Ez a megjegyzés rövidítés a Mockito.mock () módszer. Valamint csak tesztórán kell használnunk. ellentétben a gúny () módszerrel engedélyeznünk kell a Mockito annotációknak, hogy használhassák ezt a kommentárt.

Ezt megtehetjük a MockitoJUnitRunner a teszt futtatásához vagy a MockitoAnnotations.initMocks () módszer kifejezetten.

Nézzünk meg egy példát a MockitoJUnitRunner:

@RunWith (MockitoJUnitRunner.class) public class 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 (); }}

A kód olvashatóbbá tétele mellett @Mock megkönnyíti a probléma-ál megkeresését hiba esetén, mivel a mező neve megjelenik a hibaüzenetben:

Keresett, de nem hivatkozott: mockRepository.count (); -> at org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) Valójában nulla interakció volt ezzel az álral. itt: org.baeldung.MockAnnotationTest.testMockAnnotation (MockAnnotationTest.java:22) 

Továbbá, ha együtt használják a @InjectMocks, jelentősen csökkentheti a telepítő kód mennyiségét.

4. Tavaszi csizma @MockBean Megjegyzés

Használhatjuk a @MockBean gúnyobjektumok hozzáadása a Spring alkalmazás kontextusához. Az ál az alkalmazás kontextusában minden azonos típusú babot felvált.

Ha nincs meghatározva azonos típusú bab, akkor újat adunk hozzá. Ez a megjegyzés hasznos az integrációs tesztekben, ahol egy adott babot - például egy külső szolgáltatást - meg kell csúfolni.

Ennek a megjegyzésnek a használatához használnunk kell SpringRunner a teszt futtatásához:

@RunWith (SpringRunner.class) nyilvános osztály MockBeanAnnotationIntegrationTest {@MockBean UserRepository mockRepository; @Autowired ApplicationContext kontextus; @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 (); }}

Amikor egy mezőn használjuk az annotációt, valamint regisztrálunk az alkalmazás összefüggésében, akkor a gúnyot is be kell fecskendezni a mezőbe.

Ez nyilvánvaló a fenti kódban. Itt használtuk az injekciót UserRepository megcsúfolni a számol módszer. Ezután az alkalmazás kontextusából származó babot használtuk annak ellenőrzésére, hogy valóban a csúfolt bab.

5. Következtetés

Ebben a cikkben azt láttuk, hogy a gúnyobjektumok létrehozásának három módja különbözik egymástól, és hogyan lehet mindegyiket használni.

A cikkhez tartozó forráskód elérhető a GitHubon.


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