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.


$config[zx-auto] not found$config[zx-overlay] not found