Mockito - Kémek használata

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk, hogyan hozhatja ki a legtöbbet kémek Mockitóban.

Beszélni fogunk a @Kém kommentár, hogyan lehet megcsonkítani a kémet, és végül - elmegyünk a különbségbe Gúny és Kém.

És természetesen a további Mockito jóság érdekében nézze meg az itteni sorozatot.

2. Egyszerű Kém Példa

Kezdjük egy egyszerű példával hogyan kell használni a kém.

Egyszerűen fogalmazva, az API az Mockito.spy () - nak nek kémkedni egy valódi tárgy után.

Ez lehetővé teszi számunkra, hogy meghívjuk az objektum összes normál módszerét, miközben továbbra is nyomon követünk minden interakciót, akárcsak egy gúnnyal.

Rendben, tegyünk egy gyors példát, ahol egy meglévő után kémkedünk Tömb lista tárgy:

@Test public void whenSpyingOnList_thenCorrect () {List list = new ArrayList (); List spyList = Mockito.spy (lista); spyList.add ("egy"); spyList.add ("kettő"); Mockito.verify (spyList) .add ("egy"); Mockito.verify (spyList) .add ("kettő"); assertEquals (2, spyList.size ()); }

Jegyezze meg, hogyan az igazi módszer add () valójában hívják és hogyan méretét spyList 2 lesz.

3. Az @Kém Megjegyzés

Következő - nézzük meg, hogyan kell használni a @Kém annotáció. Tudjuk használni @Kém felirat helyett kém() mint a következő példában:

@Spy List spyList = new ArrayList (); @Test public void whenUsingTheSpyAnnotation_thenObjectIsSpied () {spyList.add ("one"); spyList.add ("kettő"); Mockito.verify (spyList) .add ("egy"); Mockito.verify (spyList) .add ("kettő"); assertEquals (2, spyList.size ()); }

Azért, hogy engedélyezze a Mockito annotációt (mint például @Kém, @Mock,…) - a következők egyikét kell elvégeznünk:

  • Hívja meg a módszert MockitoAnnotations.initMocks (ez) a kommentált mezők inicializálásához
  • Használja a beépített futót @RunWith (MockitoJUnitRunner.class)

4. Szúrás a Kém

Most - Lássuk, hogyan lehet elcseszni a Kém. Konfigurálhatjuk / felülírhatjuk a módszer viselkedését ugyanazzal a szintaxissal, amelyet egy csúfolattal használnánk.

A következő példában - használjuk doReturn () hogy felülbírálja a méret() módszer:

@Test public void whenStubASpy_thenStubbed () {List list = new ArrayList (); List spyList = Mockito.spy (lista); assertEquals (0, spyList.size ()); Mockito.doReturn (100) .mikor (spyList) .size (); assertEquals (100, spyList.size ()); }

5. Gúny vs. Kém Mockitóban

Most - beszéljük meg a különbséget Gúny és Kém a Mockitóban - nem a két fogalom elméleti különbségei, hanem az, hogy miben különböznek magán Mockitón belül.

Amikor Mockito létrehoz egy gúnyt - ezt a Osztály típusú, nem egy tényleges példányból. A gúny egyszerűen létrehoz csupasz csontú héjpéldány osztályba tartozik, teljes egészében a vele való interakciók nyomon követésére.

Másrészről, a kém becsomagol egy létező példányt. Ez továbbra is ugyanúgy fog viselkedni, mint a normális példány - az egyetlen különbség az, hogy azt is műszerezni fogják, hogy nyomon kövesse a vele való összes interakciót.

A következő példában - létrehozunk egy gúnyolódni a Tömb lista osztály:

@Test public void whenCreateMock_thenCreated () {List mockedList = Mockito.mock (ArrayList.class); mockedList.add ("egy"); Mockito.verify (mockedList) .add ("egy"); assertEquals (0, mockedList.size ()); }

Mint láthatjuk - egy elem hozzáadása a csúfolt listához valójában nem ad hozzá semmit - csupán a mellékhatás nélkül hívja meg a módszert.

A kém viszont másképp fog viselkedni - ez tulajdonképpen a valós megvalósításnak nevezi hozzá metódust, és adja hozzá az elemet az alapul szolgáló listához:

@Test public void whenCreateSpy_thenCreate () {List spyList = Mockito.spy (new ArrayList ()); spyList.add ("egy"); Mockito.verify (spyList) .add ("egy"); assertEquals (1, spyList.size ()); }

6. A Mockito megértése NotAMockException

Ebben az utolsó részben megismerhetjük a Mockitót NotAMockException. Ez a kivétel az egyik leggyakoribb kivétel, amellyel valószínűleg gúnyokkal vagy kémekkel való visszaélések során találkozunk.

Kezdjük azzal, hogy megnézzük, milyen körülmények között fordulhat elő ez a kivétel:

Lista lista = new ArrayList (); Mockito.doReturn (100) .mikor (lista) .size (); assertEquals ("A méret legyen 100:", 100, list.size ()); 

Amikor futtatjuk ezt a kódrészletet, a következő hibát kapjuk:

org.mockito.exceptions.misusing.NotAMockException: Az argumentum, amelyet a (() -nek ad át, nem csúfolódás! Példa a helyes elcsépelésre: doThrow (new RuntimeException ()). When (mock) .someMethod (); 

Szerencsére a Mockito hibaüzenetből teljesen egyértelmű, hogy mi a probléma itt. Példánkban a lista az objektum nem gúny. A Mockito mikor() A metódus egy ál- vagy kémobjektumot vár érvként.

Amint láthatjuk, a Kivétel üzenet még azt is leírja, hogy milyen legyen egy helyes meghívás. Most, hogy jobban megértettük a problémát, javítsuk ki az ajánlást követve:

final List spyList = Mockito.spy (új ArrayList ()); Mockito.doReturn (100) .mikor (spyList) .size (); assertEquals ("A méret legyen 100:", 100, spyList.size ()); 

Példánk most a várt módon viselkedik, és már nem látjuk a Mockitót NotAMockException.

7. Következtetés

Ebben a gyors cikkben megvitattuk a Mockito kémek használatának leghasznosabb példáit.

Megtanultuk a kém, hogyan kell használni @Kém annotáció, hogyan lehet a kém és végül - a különbség Gúny és Kém.

Mindezen példák megvalósítása megtalálható a GitHubon.

Ez egy Maven projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.

És természetesen a további Mockito jóság érdekében nézze meg az itteni sorozatot.


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