Izrugivanje praznih metoda s Mockitom

1. Pregled

U ovom kratkom vodiču usredotočeni smo na ruganje poništiti metode s Mockitom.

Kao i kod ostalih članaka usredotočenih na Mockito okvir (poput Mockito Verify, Mockito When / Then i Mockito's Mock Methods), MyList klasa prikazana u nastavku koristit će se kao suradnik u testnim slučajevima.

Za ovaj ćemo vodič dodati novu metodu:

javna klasa MyList proširuje AbstractList {@Override public void add (int index, String element) {// no-op}}

2. Jednostavno ruganje i provjeravanje

Poništiti metode se mogu koristiti s Mockitoovim ne raditi ništa (), doThrow (), i doAnswer () metode, čineći ruganje i provjeru intuitivnim:

@Test public void whenAddCalledVerified () {MyList myList = mock (MyList.class); doNothing (). when (myList) .add (isA (Integer.class), isA (String.class)); myList.add (0, ""); verify (myList, puta (1)). add (0, ""); }

Međutim, ne raditi ništa () je Mockitovo zadano ponašanje za poništiti metode.

Ova verzija whenAddCalledVerified () postiže istu stvar kao i gornju:

@Test public void whenAddCalledVerified () {MyList myList = mock (MyList.class); myList (0, ""); verify (myList, puta (1)). add (0, ""); } 

DoThrow () generira iznimku:

@Test (očekuje se = Exception.class) javna praznina givenNull_AddThrows () {MyList myList = mock (MyList.class); doThrow (). when (myList) .add (isA (Integer.class), isNull ()); myList.add (0, null); } 

Pokrivat ćemo doAnswer () ispod.

3. Snimanje argumenata

Jedan od razloga za nadjačavanje zadanog ponašanja s ne raditi ništa () je hvatanje argumenata.

U gornjem primjeru koristili smo provjeri () metoda za provjeru argumenata proslijeđenih dodati().

Međutim, možda ćemo trebati uhvatiti argumente i učiniti nešto više s njima.

U tim slučajevima koristimo ne raditi ništa () baš kao što smo učinili gore, ali s ArgumentCaptor:

@Test public void whenAddCalledValueCaptured () {MyList myList = mock (MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass (String.class); doNothing (). when (myList) .add (bilo koji (Integer.class), valueCapture.capture ()); myList.add (0, "zarobljeno"); assertEquals ("snimljeno", valueCapture.getValue ()); } 

4. Odgovaranje na poziv Poništiti

Metoda može izvoditi složenije ponašanje od pukog dodavanja ili postavljanja vrijednosti.

Za ove situacije možemo koristiti Mockito's Odgovor da dodamo ponašanje koje nam treba:

@Test public void whenAddCalledAnswered () {MyList myList = mock (MyList.class); doAnswer (invocation -> {Object arg0 = invocation.getArgument (0); Objekt arg1 = invocation.getArgument (1); assertEquals (3, arg0); assertEquals ("odgovori mi", arg1); vrati nulu;}). (myList) .add (bilo koji (Integer.class), bilo koji (String.class)); myList.add (3, "odgovori mi"); } 

Kao što je objašnjeno u Mockitovim značajkama Java 8, koristimo lambda sa Odgovor za definiranje prilagođenog ponašanja za dodati().

5. Djelomično ruganje

Djelomična izrugivanja također su opcija. Mockitova doCallRealMethod () može se koristiti za poništiti metode:

@Test public void whenAddCalledRealMethodCalled () {MyList myList = mock (MyList.class); doCallRealMethod (). when (myList) .add (bilo koji (Integer.class), bilo koji (String.class)); myList.add (1, "stvarno"); verify (myList, puta (1)). add (1, "real"); } 

Na taj način možemo istodobno nazvati stvarnu metodu i potvrditi je.

6. Zaključak

U ovom kratkom članku obradili smo četiri različita načina pristupa poništiti metode prilikom testiranja s Mockitom.

Kao i uvijek, primjeri su dostupni u ovom GitHub projektu.