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.