2.1 @Mock annotation
A Mockito-ban kétféleképpen lehet álobjektumokkal dolgozni. Az első egy teljesen virtuális objektum létrehozása , a második pedig egy meglévő objektum burkolása . Kezdjük az elsővel.
Teljesen virtuális objektum létrehozásához meg kell írnia a kódot:
ClassName variable name = Mockito.mock(ClassName.class);
Példaként hozzunk létre egy ál ArrayList osztályt:
@ExtendWith(MockitoExtension.class)
class MockTest {
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
List mockList = Mockito.mock(ArrayList.class);
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
Ebben a példában létrehozunk egy hamis ArrayList-et, és a mockList változóban tárolunk egy hivatkozást. Ennek az objektumnak a metódusai nem csinálnak semmit.
Ez a kód egyébként még rövidebbre is írható, mivel erre van egy speciális megjegyzés @Mock
.
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
List mockList;
@Test
public void whenNotUseMockAnnotation_thenCorrect() {
//these methods won't do anything - they are stubs
mockList.add("one");
mockList.add("two");
}
}
A második esetben MockitoExtension
magát az osztálykódot elemzi, és létrehozza a szükséges csonkokat. Nem kell meghívni a módszert Mockito.mock()
. Egy annotáció és a virtuális objektum készen áll. Szépség.
2.2 @Kém megjegyzés
A Mockitoban a második fontos objektumtípus a meglévő objektumok feletti burkolások. Lehetővé teszik egyrészt a meglévő osztályok használatát, másrészt az ilyen objektumok összes metódusának és változójának hívásainak lehallgatását: szükség esetén javítják a munkájukat. Ugyanolyan gyakran használják őket, mint a Mock objektumokat.
Egy objektum feletti burkoló létrehozásához meg kell írnia a kódot:
ClassName variable name = Mockito.spy(an object);
Példa az ArrayList osztály körüli burkolólapra:
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Test
public void whenMockAnnotation() {
List<String> mockList = Mockito.spy(new ArrayList<String>());
//these methods will work!
mockList.add("one");
mockList.add("two");
}
}
A legegyszerűbb formájában egy burkolóobjektum hívása egyszerűen átirányítja a hívásokat az eredeti objektumra, amelyre a hivatkozást az magában tartja . Minden ugyanúgy fog működni, mint az eredeti objektumnál.
Burkolatot is létrehozhat a - megjegyzés használatával @Spy
.
@ExtendWith(MockitoExtension.class)
class SpyTest {
@Spy
List mockList = new ArrayList<String>();
@Test
public void whenMockAnnotation() {
// these methods will work!
mockList.add("one");
mockList.add("two");
}
}
Ez a két kódpélda egyenértékű.
GO TO FULL VERSION