Stručný sprievodca pre BDDMockito

1. Prehľad

Termín BDD vytvoril ako prvý Dan North - už v roku 2006.

BDD podporuje písanie testov v prírodnom, človekom čitateľnom jazyku, ktorý sa zameriava na správanie aplikácie.

Definuje jasne štruktúrovaný spôsob písania testov nasledujúcich troch častí (Usporiadať, konať, tvrdiť):

  • daný niektoré predpoklady (Usporiadať)
  • kedy dôjde k akcii (zákon)
  • potom overiť výstup (Assert)

Knižnica Mockito sa dodáva s BDDMockito trieda, ktorá predstavuje API podporujúce BDD. Toto API nám umožňuje prijať prístup BDD priateľskejší k usporiadaniu našich testov dané () a robiť tvrdenia pomocou potom ().

V tomto článku vysvetlíme, ako nastaviť naše testy Mockito založené na BDD. Povieme si tiež o rozdieloch medzi Mockito a BDDMockito API, aby sa nakoniec zamerali na BDDMockito API.

2. Inštalácia

2.1. Maven závislosti

BDD príchuť Mockito je súčasťou mockito-jadro knižnica, aby sme mohli začať, stačí zahrnúť artefakt:

 org.mockito mockito-jadro 2.21.0 

Najnovšiu verziu aplikácie Mockito nájdete na serveri Maven Central.

2.2. Dovoz

Naše testy sa stanú čitateľnejšími, ak zahrnieme nasledujúci statický import:

import statického org.mockito.BDDMockito. *;

Všimni si BDDMockito predlžuje Mockito, takže nám nebude chýbať žiadna funkcia poskytovaná tradičnými Mockito API.

3. Mockito vs. BDDMockito

Tradičné posmievanie sa v Mockite sa vykonáva pomocou keď (obj).potom * () v kroku Usporiadať.

Neskôr bude možné interakciu s našim simulátorom overiť pomocou overiť () v kroku Assert.

BDDMockito poskytuje aliasy BDD pre rôzne Mockito metódy, takže môžeme náš Arrange krok napísať pomocou daný (namiesto kedy), rovnako by sme mohli náš krok Asert napísať pomocou potom (namiesto overiť).

Pozrime sa na príklad testovacieho orgánu používajúceho tradičné Mockito:

keď (phoneBookRepository.contains (momContactName)) .thenReturn (false); phoneBookService.register (momContactName, momPhoneNumber); overiť (phoneBookRepository). vložiť (momContactName, momPhoneNumber);

Pozrime sa, ako je to v porovnaní s BDDMockito:

dané (phoneBookRepository.contains (momContactName)) .willReturn (false); phoneBookService.register (momContactName, momPhoneNumber); potom (phoneBookRepository) .should () .insert (momContactName, momPhoneNumber);

4. Vysmievanie sa BDDMockito

Skúsme otestovať PhoneBookService kde sa budeme musieť vysmievať Úložisko telefónneho zoznamu:

verejná trieda PhoneBookService {private PhoneBookRepository phoneBookRepository; public void register (String name, String phone) {if (! name.isEmpty () &&! phone.isEmpty () &&! phoneBookRepository.contains (name)) {phoneBookRepository.insert (name, phone); }} public String search (Názov reťazca) {if (! name.isEmpty () && phoneBookRepository.contains (name)) {return phoneBookRepository.getPhoneNumberByContactName (name); } return null; }}

BDDMockito ako Mockito umožňuje nám vrátiť hodnotu, ktorá môže byť pevná alebo dynamická. Umožní nám to tiež udeliť výnimku:

4.1. Vrátenie pevnej hodnoty

Použitím BDDMockito, mohli by sme ľahko nakonfigurovať Mockito tak, aby vrátilo pevný výsledok vždy, keď je vyvolaná naša falošná cieľová metóda objektu:

dané (phoneBookRepository.contains (momContactName)) .willReturn (false); phoneBookService.register (xContactName, ""); potom (phoneBookRepository) .should (never ()). vložiť (momContactName, momPhoneNumber);

4.2. Vrátenie dynamickej hodnoty

BDDMockito nám umožňuje poskytnúť sofistikovanejší spôsob vrátenia hodnôt. Dynamický výsledok by sme mohli vrátiť na základe vstupu:

dané (phoneBookRepository.contains (momContactName)) .willReturn (true); dané (phoneBookRepository.getPhoneNumberByContactName (momContactName)) .will ((InvocationOnMock invokácia) -> invocation.getArgument (0) .equals (momContactName)? momPhoneNumber: null); phoneBookService.search (momContactName); potom (phoneBookRepository) .should () .getPhoneNumberByContactName (momContactName); 

4.3. Vyhodenie výnimky

Povedať Mockitovi, aby hodil výnimku, je celkom jednoduché:

dané (phoneBookRepository.contains (xContactName)) .willReturn (false); willThrow (new RuntimeException ()) .given (phoneBookRepository) .insert (any (String.class), eq (tooLongPhoneNumber)); try {phoneBookService.register (xContactName, tooLongPhoneNumber); zlyhať ("Mala by hodiť výnimku"); } catch (RuntimeException ex) {} then (phoneBookRepository) .should (never ()) .insert (momContactName, tooLongPhoneNumber);

Všimnite si, ako sme si vymenili pozície daný a bude *, to je povinné v prípade, že sa vysmievame metóde, ktorá nemá návratovú hodnotu.

Všimnite si tiež, že sme použili porovnávače argumentov ako (akýkoľvek, ekv) poskytnúť všeobecnejší spôsob vysmievania sa skôr na základe kritérií, ako na základe pevnej hodnoty.

5. Záver

V tomto rýchlom výučbe sme diskutovali o tom, ako sa BDDMockito snaží priniesť BDD podobnosť s našimi testami Mockito, a diskutovali sme o niektorých rozdieloch medzi Mockito a BDDMockito.

Ako vždy, zdrojový kód nájdete na GitHub - v testovacom balíku com.baeldung.bddmockito.


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