Az érvénytelen módszerek gúnyolása a Mockitóval

1. Áttekintés

Ebben a rövid bemutatóban a gúnyolódásra összpontosítunk üres módszerek Mockitóval.

Mint más, a Mockito keretrendszerre összpontosító cikkeknél (például a Mockito Verify, a Mockito When / Then és Mockito's Mock Methods), a A listám osztály az alábbiakban látható lesz mint együttműködő teszt esetekben.

Hozzáadunk egy új módszert ehhez az oktatóanyaghoz:

public class A MyList kiterjeszti az AbstractList {@Override public void add (int index, String elem) {// no-op}}

2. Egyszerű gúnyolódás és ellenőrzés

Üres módszerek alkalmazhatók a Mockito-val ne csinálj semmit(), doThrow (), és doAnswer () módszerek, gúnyolódás és intuitív ellenőrzés:

@Test public void whenAddCalledVerified () {MyList myList = gúny (MyList.class); doNothing (). mikor (myList) .add (isA (Integer.class), isA (String.class)); myList.add (0, ""); ellenőrizze (myList, times (1)). add (0, ""); }

Azonban, ne csinálj semmit() Mockito alapértelmezett viselkedése üres mód.

Ez a verzió whenAddCalledVerified () ugyanazt hajtja végre, mint a fenti:

@Test public void whenAddCalledVerified () {MyList myList = gúny (MyList.class); myList (0, ""); ellenőrizze (myList, times (1)). add (0, ""); } 

DoThrow () kivételt generál:

@Test (várható = Exception.class) public void givenNull_AddThrows () {MyList myList = gúny (MyList.class); doThrow (). mikor (myList) .add (isA (Integer.class), isNull ()); myList.add (0, null); } 

Letakarjuk doAnswer () lent.

3. Érv elfogása

Az egyik ok az alapértelmezett viselkedés felülbírálására ne csinálj semmit() érvek megragadása.

A fenti példában a igazolni () módszer az átadott argumentumok ellenőrzésére add ().

Előfordulhat azonban, hogy rögzítenünk kell az érveket, és még többet kell tennünk velük.

Ezekben az esetekben használjuk ne csinálj semmit() ahogy fentebb tettük, de egy ArgumentCaptor:

@Test public void whenAddCalledValueCaptured () {MyList myList = gúny (MyList.class); ArgumentCaptor valueCapture = ArgumentCaptor.forClass (String.class); doNothing (). when (myList) .add (any (Integer.class), valueCapture.capture ()); myList.add (0, "elfogva"); assertEquals ("elfogott", valueCapture.getValue ()); } 

4. Hívás fogadása Üres

Egy módszer összetettebb viselkedést hajthat végre, mint pusztán érték hozzáadása vagy beállítása.

Ezekre a helyzetekre használhatjuk a Mockito's-t Válasz a szükséges viselkedés hozzáadásához:

@Test public void whenAddCalledAnswered () {MyList myList = gúny (MyList.class); doAnswer (meghívás -> {objektum arg0 = invokáció.getArgument (0); objektum arg1 = invokáció.getArgument (1); assertEquals (3, arg0); assertEquals ("válaszolj nekem, arg1); return null;}). amikor (myList) .add (bármely (egész szám), bármely (karakterlánc) osztály); myList.add (3, "válaszolj"); } 

Amint azt Mockito Java 8 Features-jében kifejtettük, lambdát használunk Válasz a szokásos viselkedés meghatározásához add ().

5. Részleges gúnyolódás

A részleges gúnyolódás is lehetőség. Mockito doCallRealMethod () felhasználható üres mód:

@Test public void whenAddCalledRealMethodCalled () {MyList myList = gúny (MyList.class); doCallRealMethod (). when (myList) .add (any (bármely (Integer.class), any (String.class)); myList.add (1, "igazi"); ellenőrizze (myList, times (1)). add (1, "real"); } 

Így egyszerre hívhatjuk meg a tényleges módszert és ellenőrizhetjük.

6. Következtetés

Ebben a rövid cikkben négy különböző megközelítési módot ismertettünk üres módszerek a Mockitóval történő teszteléskor.

Mint mindig, a példák is elérhetők ebben a GitHub projektben.