Mocking Void Methods med Mockito

1. Oversikt

I denne korte opplæringen fokuserer vi på hån tomrom metoder med Mockito.

Som med andre artikler som er fokusert på Mockito-rammeverket (som Mockito Verify, Mockito When / Then og Mockito's Mock Methods), Min liste klasse vist nedenfor vil bli brukt som samarbeidspartner i test tilfeller.

Vi legger til en ny metode for denne opplæringen:

offentlig klasse MyList utvider AbstractList {@Override public void add (int index, String element) {// no-op}}

2. Enkel spott og verifisering

Tomrom metoder kan brukes med Mockito’s gjør ingenting(), doTrow (), og doAnswer () metoder, som gjør spottende og verifiserende intuitivt:

@Test offentlig ugyldig nårAddCalledVerified () {MyList myList = mock (MyList.class); doNothing (). når (myList) .add (isA (Integer.class), isA (String.class)); myList.add (0, ""); verifiser (myList, times (1)). add (0, ""); }

Derimot, gjør ingenting() er Mockitos standard oppførsel for tomrom metoder.

Denne versjonen av nårAddCalledVerified () oppnår det samme som det ovenfor:

@Test offentlig ugyldig nårAddCalledVerified () {MyList myList = mock (MyList.class); myList (0, ""); verifiser (myList, times (1)). add (0, ""); } 

DoThrow () genererer et unntak:

@Test (forventet = Exception.class) offentlig ugyldig givenNull_AddThrows () {MyList myList = mock (MyList.class); doThrow (). når (myList) .add (isA (Integer.class), isNull ()); myList.add (0, null); } 

Vi skal dekke doAnswer () under.

3. Argumentfangst

En grunn til å overstyre standardadferden med gjør ingenting() er å fange argumenter.

I eksemplet ovenfor brukte vi bekrefte() metode for å sjekke argumentene som sendes til legge til().

Vi kan imidlertid trenge å fange argumentene og gjøre noe mer med dem.

I disse tilfellene bruker vi gjør ingenting() akkurat som vi gjorde ovenfor, men med en ArgumentCaptor:

@Test offentlig ugyldig nårAddCalledValueCaptured () {MyList myList = mock (MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass (String.class); doNothing (). når (myList) .add (any (Integer.class), valueCapture.capture ()); myList.add (0, "fanget"); assertEquals ("fanget", valueCapture.getValue ()); } 

4. Besvare et anrop til Tomrom

En metode kan utføre mer kompleks oppførsel enn bare å legge til eller sette verdi.

For disse situasjonene kan vi bruke Mockito’s Svar for å legge til atferden vi trenger:

@Test offentlig ugyldig nårAddCalledAnswered () {MyList myList = mock (MyList.class); doAnswer (påkallelse -> {Object arg0 = invocation.getArgument (0); Object arg1 = invocation.getArgument (1); assertEquals (3, arg0); assertEquals ("svar meg", arg1); returner null;}). når (myList) .add (any (Integer.class), any (String.class)); myList.add (3, "svar meg"); } 

Som forklart i Mockito’s Java 8 Features, bruker vi en lambda med Svar å definere tilpasset oppførsel for legge til().

5. Delvis hån

Delvise håner er også et alternativ. Mockito doCallRealMethod () kan brukes til tomrom metoder:

@Test offentlig ugyldig nårAddCalledRealMethodCalled () {MyList myList = mock (MyList.class); doCallRealMethod (). når (myList) .add (any (Integer.class), any (String.class)); myList.add (1, "ekte"); verifiser (myList, times (1)). add (1, "real"); } 

På denne måten kan vi ringe den faktiske metoden og verifisere den samtidig.

6. Konklusjon

I denne korte artikkelen tok vi for oss fire forskjellige måter å komme til tomrom metoder når du tester med Mockito.

Som alltid er eksemplene tilgjengelige i dette GitHub-prosjektet.


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