Mockito’s Mock Methods
1. Oversikt
Denne opplæringen illustrerer ulike bruksområder for standard statisk håne metoder for Mockito API.
Som med andre artikler som er fokusert på Mockito-rammeverket (som Mockito Verify eller Mockito When / Then), har Min liste klassen vist nedenfor vil bli brukt som samarbeidspartner for å bli hånet i testsaker:
offentlig klasse MyList utvider AbstractList {@Override public String get (int index) {return null; } @ Override public int size () {retur 1; }}
2. Enkel spott
Den enkleste overbelastede varianten av håne metoden er den med en enkelt parameter for klassen som skal spottes:
offentlig statisk T-mock (Class classToMock)
Vi vil bruke denne metoden til å spotte en klasse og sette en forventning:
MyList listMock = mock (MyList.class); når (listMock.add (anyString ())). deretterReturn (false);
Utfør deretter en metode på mock:
boolsk lagt = listMock.add (randomAlphabetic (6));
Følgende kode bekrefter at legge til metoden har blitt påkalt på mock, og at påkallingen returnerer en verdi som samsvarer med forventningen vi satte før:
verifisere (listMock). legge til (anyString ()); assertThat (lagt til, er (false));
3. Mocking With Mock's Name
I denne delen vil vi dekke en annen variant av håne metode som er utstyrt med et argument som spesifiserer navnet på spottet:
offentlig statisk T-mock (klasse classToMock, strengnavn)
Generelt sett har navnet på en mock ingenting å gjøre med arbeidskoden, men kan være nyttig når det gjelder feilsøking, der mockens navn brukes til å spore verifiseringsfeil.
For å sikre at det oppgitte navnet på en mock er inkludert i meldingen om et unntak fra en mislykket bekreftelse, vil vi stole på en JUnit-implementering av TestRule-grensesnitt, kalt ExpectedException, og inkluder det i en testklasse:
@Rule public ExpectedException kastet = ExpectedException.none ();
Denne regelen vil bli brukt til å håndtere unntak fra testmetoder.
I den følgende koden lager vi en mock for Min liste klasse og gi den navnet myMock:
MyList listMock = mock (MyList.class, "myMock");
Deretter setter du en forventning til en metode for mock og utfører den:
når (listMock.add (anyString ())). deretterReturn (false); listMock.add (randomAlphabetic (6));
Vi vil opprette en bevisst mislykket bekreftelse som burde kaste et unntak med meldingen som inneholder informasjon om mock. For å gjøre det, må forventningene til unntaket settes først:
kastet.expect (TooLittleActualInvocations.class); kastet.expectMessage (inneholderString ("myMock.add"));
Følgende bekreftelse skal mislykkes og gi et unntak som samsvarer med forventet:
verifiser (listMock, times (2)). add (anyString ());
Her er budskapet om det kastede unntaket:
org.mockito.exceptions.verification.TooLittleActualInvocations: myMock.add (); Ønsket to ganger: på com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_thenCorrect (MockitoMockTest.java: ...) men var 1 gang: på com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_thenCorrect (MockitoMockTest.java: ...
Som vi kan se, er mockens navn inkludert i unntaksmeldingen, noe som vil være nyttig for å finne feilpunktet i tilfelle mislykket bekreftelse.
4. Hånende med Svar
Her vil vi demonstrere bruken av a håne variant der strategien for mockens svar på interaksjon er konfigurert ved opprettelsestidspunktet. Dette håne metodens signatur i Mockito-dokumentasjonen ser ut som følgende:
offentlig statisk T-mock (klasse classToMock, svar standard svar)
La oss starte med definisjonen av en implementering av Svar grensesnitt:
klasse CustomAnswer implementerer Svar {@Override offentlig boolsk svar (InvocationOnMock påkalling) kaster Kastbar {returner falsk; }}
De CustomAnswer klasse ovenfor brukes til generering av en mock:
MyList listMock = mock (MyList.class, ny CustomAnswer ());
Hvis vi ikke setter en forventning til en metode, blir standardsvaret, som ble konfigurert av CustomAnswer type, vil spille inn. For å bevise det, hopper vi over trinnet for forventningsinnstilling og hopper til metodeutførelsen:
boolsk lagt = listMock.add (randomAlphabetic (6));
Følgende bekreftelse og påstand bekrefter at håne metode med en Svar argumentet har fungert som forventet:
verifiser (listMock) .add (anyString ()); assertThat (lagt til, er (false));
5. Hånende med MockSettings
Finalen håne metoden som er dekket i denne artikkelen er varianten med en parameter for MockSettings type. Denne overbelastede metoden brukes til å gi en ikke-standard mock.
Det er flere tilpassede innstillinger som støttes av metoder for MockSettings grensesnitt, for eksempel å registrere en lytter for metodeanrop på den nåværende mocken med invocationListeners, konfigurerer serialisering med kan serieiseres, spesifiserer forekomsten å spionere på med spiedInstance, konfigurerer Mockito til å prøve å bruke en konstruktør når du instantierer en mock med useConstructor, og noen andre.
For enkelhets skyld vil vi gjenbruke CustomAnswer klasse introdusert i forrige avsnitt for å lage en MockSettings implementering som definerer et standardsvar.
EN MockSettings objektet instantieres ved en fabrikkmetode som følger:
MockSettings customSettings = withSettings (). DefaultAnswer (ny CustomAnswer ());
Det innstillingsobjektet vil bli brukt i opprettelsen av en ny mock:
MyList listMock = mock (MyList.class, customSettings);
I likhet med foregående avsnitt vil vi påberope oss legge til metode for a Min liste forekomst og verifiser at en håne metode med en MockSettings argument fungerer som det er ment å bruke følgende kodebit:
boolsk lagt = listMock.add (randomAlphabetic (6)); verifisere (listMock). legge til (anyString ()); assertThat (lagt til, er (false));
6. Konklusjon
Denne opplæringen har dekket håne metoden til Mockito i detalj. Implementeringen av disse eksemplene og kodebiter kan bli funnet i et GitHub-prosjekt.