Kotlin s Mockitom

1. Úvod

Kotlin a Java kráčajú ruka v ruke. To znamená, že v našich projektoch Kotlin môžeme využiť obrovské množstvo existujúcich knižníc Java.

V tomto krátkom článku uvidíme, ako sa môžeme vysmievať používaniu Mockita v Kotline. Ak sa chcete dozvedieť viac informácií o knižnici, prečítajte si tento článok.

2. Inštalácia

Najskôr si vytvorme projekt Maven a pridajme do neho závislosti JUnit a Mockito pom.xml:

 org.mockito mockito-core 3.3.3 test junit junit 4.12 test 

Musíme tiež povedať Mavenovi, že pracujeme s Kotlinom, aby nám zostavil zdrojový kód. V oficiálnej dokumentácii Kotlin nájdete ďalšie informácie o tom, ako to nakonfigurovať v pom.xml.

3. Používanie Mockito s Kotlin

Predpokladajme, že máme implementáciu, ktorú chceme otestovať - LendBookManager. Táto trieda je závislá od služby s názvom BookService, ktorý zatiaľ nie je implementovaný:

rozhranie BookService {fun inStock (bookId: Int): Boolean fun lend (bookId: Int, memberId: Int)} 

The BookService sa vstrekuje počas inštancie LendBookManager a používa sa dvakrát v celom systéme odhlásiť sa metóda, čo je metóda, ktorú potrebujeme na napísanie testu:

trieda LendBookManager (val bookService: BookService) {fun checkout (bookId: Int, memberId: Int) {if (bookService.inStock (bookId)) {bookService.lend (bookId, memberId)} else {throw IllegalStateException ("Kniha nie je k dispozícii ")}}} 

Bolo by ťažké napísať jednotkové testy pre túto metódu bez schopnosti sa vysmievať BookService - čo je miesto, kde Mockito príde vhod.

Iba pomocou dvoch riadkov kódu môžeme vytvoriť zosmiešnenie kódu BookService rozhranie a dať mu pokyn, aby vrátil pevnú hodnotu, keď na sklade() metóda sa volá:

val mockBookService = Mockito.mock (BookService :: class.java) Mockito.`kedy` (mockBookService. inStock (100)). thenReturn (true) 

Toto prinúti mockBookService inštancie sa vrátiť pravda kedykoľvek na sklade() metóda sa volá s argumentom 100 (všimnite si, že sme museli uniknúť z kedy() metóda využívajúca spätný klik; toto sa vyžaduje od kedy je vyhradené kľúčové slovo v jazyku Kotlin).

Túto vysmievanú inštanciu potom môžeme odovzdať LendBookManager počas inštancie vyvolajte metódu, ktorú chceme vyskúšať, a overte, či požičať () metóda bola volaná ako výsledok operácie:

val manager = LendBookManager (mockBookService) manager.checkout (100, 1) Mockito.verify (mockBookService) .lend (100, 1) 

Môžeme rýchlo otestovať ďalšiu logickú cestu implementácie našej metódy, ktorá by mala vyvolať výnimku, ak požadovaná kniha nie je na sklade:

@Test (očakáva sa = IllegalStateException :: class) zábava, keď BookIsNotAvailable_thenAnExceptionIsThrown () {val mockBookService = Mockito.mock (BookService :: class.java) Mockito.`kedy` (mockBookService. InStock (100)). LendBookManager (mockBookService) manager.checkout (100, 1)} 

Všimli sme si, že pre tento test my povedalmockBookService vrátiť sa nepravdivé na otázku, či bola kniha s ID 100 na sklade. To by malo spôsobiť odhlásiť sa() vyvolanie hodiť IllegalStateException.

Používame očakávané majetok na @Test anotácia, ktorá naznačuje, že od tohto testu očakávame výnimku.

4. MockitoKotlin Knižnica

Pomocou kódu open source s názvom mockito-kotlin môžeme náš kód zariadiť, aby vyzeral viac ako Kotlin. Táto knižnica obsahuje niektoré z funkcií Mockita okolo svojich metód a poskytuje jednoduchšie API:

@Test zábava whenBookIsAvailable_thenLendMethodIsCalled () {val mockBookService: BookService = mock () kedykoľvek (mockBookService.inStock (100)). ThenReturn (true) val manager = LendBookManager (mockBookService) manager.checkout (100, 1) verifikovať (. 1, 1) (100, 1)}

Poskytuje tiež svoju verziu falošný () metóda. Pri použití tejto metódy môžeme využiť odvodenie typu, aby sme ju mohli zavolať bez poskytnutia ďalších parametrov.

Nakoniec toto knižnica vystavuje nový kedykoľvek () metóda, ktorá sa dá použiť voľne, bez potreby spätných kliešťov, aké sme museli používať pri použití Mockitovho natívneho programu kedy() metóda.

Kompletný zoznam vylepšení nájdete na ich wiki.

5. Záver

V tomto rýchlom výučbe sme sa pozreli na to, ako nastaviť náš projekt tak, aby používal Mockito a Kotlin spoločne, a ako môžeme túto kombináciu využiť na vytváranie falošných správ a písanie efektívnych testov jednotiek.

Ako vždy, celý zdroj si môžete pozrieť v repo GitHub.


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