Mocking Void Methods med Mockito
1. Oversigt
I denne korte vejledning fokuserer vi på hån ugyldig metoder med Mockito.
Som med andre artikler, der fokuserer på Mockito-rammen (såsom Mockito Verify, Mockito When / Then og Mockito's Mock Methods), MyList klasse vist nedenfor vil blive brugt som samarbejdspartner i testsager.
Vi tilføjer en ny metode til denne tutorial:
public class MyList udvider AbstractList {@Override public void add (int index, String element) {// no-op}}
2. Enkel hån og verifikation
Ugyldig metoder kan bruges med Mockito's gøre ingenting(), doTrow (), og doAnswer () metoder, der gør spottende og verificerende intuitive:
@Test offentlig ugyldig nårAddCalledVerified () {MyList myList = mock (MyList.class); doNothing (). når (myList) .add (isA (Integer.class), isA (String.class)); myList.add (0, ""); verificer (myList, times (1)). tilføj (0, ""); }
Imidlertid, gøre ingenting() er Mockitos standardadfærd for ugyldig metoder.
Denne version af nårAddCalledVerified () udfører det samme som ovenstående:
@Test offentlig ugyldig nårAddCalledVerified () {MyList myList = mock (MyList.class); myList (0, ""); verificer (myList, times (1)). tilføj (0, ""); }
DoThrow () genererer en undtagelse:
@Test (forventet = Exception.class) offentlig ugyldighed givenNull_AddThrows () {MyList myList = mock (MyList.class); doThrow (). når (myList) .add (isA (Integer.class), isNull ()); myList.add (0, null); }
Vi dækker doAnswer () under.
3. Argumentfangst
Én grund til at tilsidesætte standardadfærden med gøre ingenting() er at fange argumenter.
I eksemplet ovenfor brugte vi verificere() metode til at kontrollere de argumenter, der sendes til tilføje().
Vi kan dog være nødt til at fange argumenterne og gøre noget mere med dem.
I disse tilfælde bruger vi gøre ingenting() ligesom 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 (enhver (Integer.class), valueCapture.capture ()); myList.add (0, "fanget"); assertEquals ("capture", valueCapture.getValue ()); }
4. Besvare et opkald til Ugyldig
En metode kan udføre mere kompleks adfærd end blot tilføje eller indstille værdi.
I disse situationer kan vi bruge Mockito's Svar for at tilføje den adfærd, vi har brug for:
@Test offentlig ugyldig nårAddCalledAnswered () {MyList myList = mock (MyList.class); doAnswer (invocation -> {Object arg0 = invocation.getArgument (0); Object arg1 = invocation.getArgument (1); assertEquals (3, arg0); assertEquals ("svar mig", arg1); returner null;}) når (myList) .add (enhver (Integer.class), enhver (String.class)); myList.add (3, "svar mig"); }
Som forklaret i Mockitos Java 8-funktioner bruger vi en lambda med Svar at definere brugerdefineret adfærd for tilføje().
5. Delvis hån
Delvise mocks er også en mulighed. Mockito's doCallRealMethod () kan bruges til ugyldig metoder:
@Test offentlig ugyldig nårAddCalledRealMethodCalled () {MyList myList = mock (MyList.class); doCallRealMethod (). når (myList) .add (enhver (Integer.class), any (String.class)); myList.add (1, "rigtig"); verificer (myList, times (1)). tilføj (1, "real"); }
På denne måde kan vi kalde den aktuelle metode og bekræfte den på samme tid.
6. Konklusion
I denne korte artikel dækkede vi fire forskellige måder at komme til ugyldig metoder til test med Mockito.
Som altid er eksemplerne tilgængelige i dette GitHub-projekt.