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.