2.1 @Mock annotering

Det er to måter å jobbe med falske objekter i Mockito. Den første er å lage et fullstendig virtuelt objekt , det andre er å pakke et eksisterende objekt inn i en wrapper. La oss starte med den første.

For å lage et fullstendig virtuelt objekt, må du skrive koden:

ClassName variable name = Mockito.mock(ClassName.class);

La oss lage en mock ArrayList-klasse som et eksempel:

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

I dette eksemplet lager vi en falsk ArrayList og lagrer en referanse til den i mockList-variabelen. Metodene til dette objektet gjør ingenting.

Forresten, denne koden kan skrives enda kortere, siden det er en spesiell merknad for dette @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");
    }
}

I det andre tilfellet MockitoExtensionvil den analysere selve klassekoden og lage de nødvendige stubbene. Du trenger ikke kalle metoden Mockito.mock(). En merknad og det virtuelle objektet er klart. Skjønnhet.

2.2 @Spion-kommentar

Den andre viktige typen objekter i Mockito er wrappers over eksisterende objekter. De tillater på den ene siden å bruke eksisterende klasser, og på den annen side å avskjære anrop til alle metoder og variabler for slike objekter: å korrigere arbeidet deres der det er nødvendig. De brukes like ofte som Mock-objekter.

For å lage en wrapper over et objekt, må du skrive koden:

ClassName variable name = Mockito.spy(an object);

Et eksempel med en wrapper rundt ArrayList-klassen:

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

I sin enkleste form omdirigerer et kall til et wrapper-objekt ganske enkelt anrop til det originale objektet, referansen som det holder inne i seg selv . Alt vil fungere akkurat som med det originale objektet.

Du kan også lage en wrapper ved å bruke merknaden - @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");
    }
}

Disse to kodeeksemplene er likeverdige.