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 MockitoExtensionmagá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ű.