Kotlin s Mockitom

1. Uvod

Kotlin i Java hodaju ruku pod ruku. To znači da možemo iskoristiti ogroman broj postojećih Java knjižnica u našim projektima Kotlin.

U ovom kratkom članku vidjet ćemo kako se možemo rugati upotrebom Mockita u Kotlinu. Ako želite saznati više o knjižnici, pogledajte ovaj članak.

2. Postavljanje

Prije svega, kreirajmo Maven projekt i dodajte ovisnosti JUnit i Mockito u pom.xml:

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

Moramo također reći Mavenu da radimo s Kotlinom kako bi on kompilirao izvorni kod za nas. Pogledajte službenu Kotlin dokumentaciju za više informacija o tome kako to konfigurirati u pom.xml.

3. Korištenje Mockito s Kotlin

Pretpostavimo da imamo implementaciju koju želimo testirati - LendBookManager. Ova klasa ovisi o usluzi, tzv BookService, koji još nije implementiran:

sučelje BookService {zabava u stoku (bookId: Int): logička posudba (bookId: Int, memberId: Int)} 

The BookService ubrizgava se za vrijeme instalacije LendBookManager i koristi se dva puta kroz provjeri metoda, koja je metoda koja nam je potrebna za pisanje testa za:

class LendBookManager (val bookService: BookService) {check check (bookId: Int, memberId: Int) {if (bookService.inStock (bookId)) {bookService.lend (bookId, memberId)} else {throw IllegalStateException ("Knjiga nije dostupna ")}}} 

Bilo bi teško napisati jedinične testove za tu metodu, a da se ne bude moguće rugati BookService - tu Mockito dobro dođe.

Možemo, sa samo dva retka koda, stvoriti lažni znak BookService sučelje i naložite mu da vrati fiksnu vrijednost kada inStock () metoda se naziva:

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

To će prisiliti mockBookService instancu za povratak pravi kad god inStock () metoda poziva se s argumentom 100 (primijetite da smo morali pobjeći iz kada() metoda koja koristi povratni udarac; to je potrebno budući da kada je rezervirana ključna riječ na jeziku Kotlin).

Tada možemo ovu prosljeđenu instancu proslijediti LendBookManager tijekom instancije pozovite metodu koju želimo testirati i provjerite je li posuditi() kao operacija pozvana je metoda:

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

Možemo brzo testirati drugi logični put implementacije naše metode, koji bi trebao izuzeti ako željena knjiga nije na zalihi:

@Test (očekuje se = IllegalStateException :: class) zabavno kadaBookIsNotAvailable_thenAnExceptionIsThrown () {val mockBookService = Mockito.mock (BookService :: class.java) Mockito.`when` (mockBookService. InStock (100)). ThenReturn = 100 LendBookManager (mockBookService) manager.checkout (100, 1)} 

Primijetili smo da smo za ovaj test rekaomockBookService vratiti lažno na pitanje je li knjiga s id 100 na zalihi. To bi trebalo uzrokovati provjeri() zaziv za bacanje an IllegalStateException.

Koristimo očekivano nekretnina na @Test napomena koja ukazuje da očekujemo da će ovaj test izuzeti.

4. MockitoKotlin Knjižnica

Naš kod možemo učiniti sličnijim Kotlinu pomoću biblioteke otvorenog koda nazvane mockito-kotlin. Ova knjižnica obavija neke od Mockitovih funkcionalnosti oko svojih metoda, pružajući jednostavniji API:

@Test zabave kadaBookIsAvailable_thenLendMethodIsCalled () {val mockBookService: BookService = mock () kad god (mockBookService.inStock (100)). ThenReturn (true) val manager = LendBookManager (mockBookService) manager.checkout (100, 1S) verify (check ,lend) (100, 1)}

Također pruža svoju verziju oponašanje() metoda. Kada koristimo ovu metodu, možemo iskoristiti zaključivanje tipa kako bismo je mogli pozvati bez prosljeđivanja dodatnih parametara.

Napokon, ovo knjižnica izlaže novo kad god () metoda koja se može slobodno koristiti, bez potrebe za povratnim otkucajima kao što smo morali kad se koristi Mockitoov izvorni kada() metoda.

Potpuni popis poboljšanja potražite u wikiju.

5. Zaključak

U ovom smo brzom vodiču pogledali kako postaviti naš projekt tako da zajedno koristi Mockito i Kotlin i kako ovu kombinaciju možemo iskoristiti za stvaranje lažnih i pisanje učinkovitih jediničnih testova.

Kao i uvijek, cjelovit izvor možete provjeriti u GitHub repo-u.


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