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.


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