Rövid útmutató a BDDMockito alkalmazáshoz

1. Áttekintés

A BDD kifejezést először Dan North találta ki - még 2006-ban.

A BDD ösztönzi a tesztek írását természetes, ember által olvasható nyelven, amely az alkalmazás viselkedésére összpontosít.

A tesztek írásának világosan strukturált módját három szakasz (Rendezés, Tett, Állítás) alapján határozza meg:

  • adott néhány előfeltétel (Arrange)
  • mikor fellépés történik (törvény)
  • azután ellenőrizze a kimenetet (Assert)

A Mockito könyvtárhoz a BDDMockito osztály, amely BDD-barát API-kat mutat be. Ez az API lehetővé teszi számunkra, hogy BDD-barátabb megközelítést alkalmazzunk tesztjeink felhasználásával adott() és állítások felhasználásával azután().

Ebben a cikkben elmagyarázzuk, hogyan állítsuk be a BDD-alapú Mockito tesztjeinket. Beszélünk a különbségekről is Mockito és BDDMockito API-k, hogy végül a BDDMockito API.

2. Beállítás

2.1. Maven-függőségek

A Mockito BDD íze a mockito-core könyvtár, a kezdéshez csak bele kell foglalnunk a műtárgyat:

 org.mockito mockito-core 2.21.0 

A Mockito legújabb verzióját a Maven Central oldalon találja.

2.2. Behozatal

Tesztjeink olvashatóbbá válhatnak, ha a következő statikus importálást tartalmazzák:

importálja a statikus org.mockito.BDDMockito. *;

Figyelje meg BDDMockito kiterjed Mockito, így nem hagyjuk ki a hagyományos funkciókat Mockito API.

3. Mockito vs. BDDMockito

A hagyományos gúnyolódást Mockitóban a mikor (obj).azután*() az Elrendezés lépésben.

Később az álunkkal való interakció a igazolni () az Assert lépésben.

BDDMockito BDD álneveket biztosít különféle Mockito módszereket, így az Arrange lépésünket megírhatjuk adott (ahelyett mikor), ugyanígy megírhatnánk Assert lépésünket is azután (ahelyett igazolja).

Nézzünk meg egy példát egy teszt testre a hagyományos Mockito használatával:

mikor (phoneBookRepository.contains (momContactName)) .thenReturn (false); phoneBookService.register (momContactName, momPhoneNumber); ellenőrizze (phoneBookRepository). beszúrja (momContactName, momPhoneNumber);

Nézzük meg, hogy hasonlít ez BDDMockito:

adott (telefonkönyvRepository.contains (momContactName)) .willReturn (hamis); phoneBookService.register (momContactName, momPhoneNumber); majd (phoneBookRepository) .should (). beszúrás (momContactName, momPhoneNumber);

4. Gúnyolódni BDDMockito

Próbáljuk meg kipróbálni a PhoneBookService ahol gúnyolódnunk kell Telefonkönyv-tár:

nyilvános osztály Telefonkönyv-kiszolgáló {privát TelefonkönyvRepository telefonkönyvRepository; public void register (Karakterlánc neve, String telefon) {if (! név.isEmpty () &&! phone.isEmpty () &&! phoneBookRepository.contains (név)) {phoneBookRepository.insert (név, telefon); }} public String search (String name) {if (! name.isEmpty () && phoneBookRepository.contains (name)) {return phoneBookRepository.getPhoneNumberByContactName (név); } return null; }}

BDDMockito mint Mockito lehetővé teszi számunkra, hogy olyan értéket adjunk vissza, amely lehet fix vagy dinamikus. Ez lehetővé teszi számunkra, hogy kivételt tegyünk:

4.1. Fix érték visszaadása

Használata BDDMockito, könnyen konfigurálhatjuk a Mockitot úgy, hogy fix eredményt adjon vissza, amikor a gúnyobjektum cél módszerünket meghívjuk:

adott (telefonkönyvRepository.contains (momContactName)) .willReturn (hamis); phoneBookService.register (xContactName, ""); akkor (phoneBookRepository) .kell (soha ()). beszúrni (momContactName, momPhoneNumber);

4.2. Dinamikus érték visszaadása

BDDMockito lehetővé teszi számunkra az értékek visszatérésének kifinomultabb módját. A bemenet alapján dinamikus eredményt adhatunk vissza:

adott (telefonkönyvRepository.contains (momContactName)) .willReturn (true); adott (phoneBookRepository.getPhoneNumberByContactName (momContactName)) .will ((InvocationOnMock invocation) -> invocation.getArgument (0) .equals (momContactName)? momPhoneNumber: null); phoneBookService.search (momContactName); akkor (phoneBookRepository) .should () .getPhoneNumberByContactName (momContactName); 

4.3. Kivételt dobni

Elég egyszerű azt mondani Mockitónak, hogy dobjon kivételt:

adott (phoneBookRepository.contains (xContactName)) .willReturn (hamis); willThrow (new RuntimeException ()) .given (phoneBookRepository) .insert (any (String.class), eq (tooLongPhoneNumber)); próbálja meg a {phoneBookService.register (xContactName, tooLongPhoneNumber); kudarc ("Kivételt kell dobnia"); } catch (RuntimeException ex) {} majd (phoneBookRepository) .should (never ()) .insert (momContactName, tooLongPhoneNumber);

Figyeljük meg, hogyan cseréltük a adott és akarat*, ez kötelező abban az esetben, ha olyan módszert gúnyolunk, amelynek nincs visszatérési értéke.

Vegye figyelembe azt is, hogy olyan argumentum-illesztőket használtunk, mint (Bármi, egyenértékű) általánosabb gúnyolódás biztosítása kritériumok alapján, nem pedig egy fix érték függvényében.

5. Következtetés

Ebben a gyors bemutatóban megvitattuk, hogy a BDDMockito hogyan próbál BDD-t hasonlítani a Mockito tesztjeinkhez, és megbeszéltük a Mockito és BDDMockito.

Mint mindig, a forráskód megtalálható a GitHub oldalon - a tesztcsomagon belül com.baeldung.bddmockito.


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