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.