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 MockitoExtension
vil 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.