Mockito’s Mock Methods
1. Áttekintés
Ez az oktatóanyag bemutatja a szabványos statikus különféle felhasználási módjait gúnyolódni módszerei Mockito API.
Mint más, a Mockito keretrendszerre összpontosító cikkeknél (például a Mockito Verify vagy a Mockito When / Then), a A listám Az alábbiakban bemutatott osztályt fogják használni együttműködőként, amelyet teszt esetekben kigúnyolhatnak:
public class A MyList kiterjeszti az AbstractList {@Orride public String get (int index) {return null; } @Orride public int size () {return 1; }}
2. Egyszerű gúnyolódás
A. Legegyszerűbb túlterhelt változata gúnyolódni A metódusnak egyetlen paramétere van a gúnyolandó osztály számára:
nyilvános statikus T gúny (Class classToMock osztály)
Ezt a módszert fogjuk használni egy osztály kigúnyolására és egy elvárás beállítására:
MyList listMock = gúny (MyList.class); mikor (listMock.add (anyString ())). thenReturn (false);
Ezután hajtson végre egy módszert az álon:
logikai érték hozzáadva = listMock.add (randomAlphabetic (6));
A következő kód megerősíti, hogy a hozzá metódust meghívták az álra, és hogy a meghívás olyan értéket ad vissza, amely megfelel az előzőleg beállított várakozásnak:
ellenőrizze (listMock) .add (anyString ()); assertThat (hozzáadva, van (hamis));
3. Gúny a gúny nevével
Ebben a szakaszban a gúnyolódni metódus, amely egy argumentummal rendelkezik, amely meghatározza az ál nevét:
nyilvános statikus T-modell (Class classToMock, String name)
Általánosságban elmondható, hogy az ál nevének semmi köze a működő kódhoz, de hasznos lehet a hibakeresésnél, ahol az ál nevét használják az ellenőrzési hibák felkutatására.
Annak biztosítása érdekében, hogy a gúny megadott neve szerepeljen a sikertelen ellenőrzésből származó kivétel üzenetében, a JUnit TestRule felület, hívott ExpectedException, és vegye fel egy tesztosztályba:
@Rule public ExpectedException thrown = ExpectedException.none ();
Ezt a szabályt fogják használni a vizsgálati módszerekből származó kivételek kezelésére.
A következő kódban létrehozunk egy gúnyt a A listám osztály és nevezze el myMock:
MyList listMock = gúny (MyList.class, "myMock");
Ezután állítson be egy elvárást a gúny módszerére és hajtsa végre:
mikor (listMock.add (anyString ())). thenReturn (false); listMock.add (randomAlphabetic (6));
Létrehozunk egy szándékosan sikertelen ellenőrzést, amelynek kivételt kell hoznia az üzenettel kapcsolatos információkat tartalmazó üzenettel. Ennek érdekében először a kivételre vonatkozó elvárásokat kell meghatározni:
thrown.expect (TooLittleActualInvocations.class); thrown.expectMessage (tartalmazzaString ("myMock.add"));
A következő ellenőrzésnek sikertelennek kell lennie, és kivételt kell tennie a vártnak:
ellenőrizze (listMock, times (2)). add (anyString ());
Itt van a dobott kivétel üzenete:
org.mockito.exceptions.verification.TooLittleActualInvocations: myMock.add (); 2-szer keresett: com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_thenCorrect (MockitoMockTest.java: ...) címen, de 1 alkalommal volt: com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_thenCorrect (MockitoMockTest)
Mint láthatjuk, a gúny neve szerepel a kivétel üzenetben, amely sikertelen ellenőrzés esetén hasznos lesz a hibapont megtalálásához.
4. Gúnyolódni Válasz
Itt bemutatjuk az a használatát gúnyolódni változat, amelyben az ál interakcióra adott válaszainak stratégiáját a létrehozáskor konfigurálják. Ez gúnyolódni A módszer aláírása a Mockito dokumentációjában a következőképpen néz ki:
nyilvános statikus T gúny (Class classToMock, Answer defaultAnswer)
Kezdjük azzal, hogy meghatározzuk a Válasz felület:
A CustomAnswer osztály végrehajtja a Válasz {@Orride public Boolean Answer (InvocationOnMock invocation) dobását Throwable {return false; }}
A CustomAnswer a fenti osztály egy gúny előállítására használatos:
MyList listMock = gúny (MyList.class, új CustomAnswer ());
Ha nem állítunk elvárást egy metódusra, akkor az alapértelmezett választ, amelyet a CustomAnswer típusú, játékba fog lépni. Ennek bizonyítása érdekében átugorjuk az elvárás beállítási lépését és a módszer végrehajtására ugrunk:
logikai érték hozzáadva = listMock.add (randomAlphabetic (6));
A következő igazolás és állítás megerősíti, hogy a gúnyolódni módszer egy Válasz érv a várt módon működött:
ellenőrizze (listMock) .add (anyString ()); assertThat (hozzáadva, van (hamis));
5. Gúnyolódni MockSettings
A végső gúnyolódni A cikkben tárgyalt módszer a MockSettings típus. Ezt a túlterhelt módszert használjuk nem szabványos modell létrehozására.
Számos egyéni beállítás létezik, amelyeket a MockSettings interfész, például egy figyelő regisztrálása a metódus meghívásaihoz az aktuális mock-on meghívásHallgatók, konfigurálja a sorosítást a sorosítható, meghatározva azt a példányt, akivel kémkedni kell kémkedettInstance, konfigurálva a Mockitot egy konstruktor használatának megkísérlésére, amikor egy gúnyt példányosít useConstructor, és néhány más.
A kényelem érdekében újból felhasználjuk a CustomAnswer osztály, amelyet az előző szakaszban vezettek be a MockSettings megvalósítás, amely meghatározza az alapértelmezett választ.
A MockSettings az objektumot gyári módszerrel példányosítják az alábbiak szerint:
MockSettings customSettings = withSettings (). DefaultAnswer (új CustomAnswer ());
Ezt a beállító objektumot felhasználják egy új modell létrehozásához:
MyList listMock = gúny (MyList.class, customSettings);
Az előző szakaszhoz hasonlóan a hozzá módszer a A listám és ellenőrizze, hogy a gúnyolódni módszer a MockSettings argumentum a következő kódrészlet használatával működik:
logikai érték hozzáadva = listMock.add (randomAlphabetic (6)); ellenőrizze (listMock) .add (anyString ()); assertThat (hozzáadva, van (hamis));
6. Következtetés
Ez az oktatóanyag lefedte a gúnyolódni módszer Mockito részletesen. Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható egy GitHub projektben.