Kotlin med Mockito

1. Introduksjon

Kotlin og Java går hånd i hånd. Dette betyr at vi kan utnytte det store antallet eksisterende Java-biblioteker i våre Kotlin-prosjekter.

I denne korte artikkelen ser vi hvordan vi kan spotte ved hjelp av Mockito i Kotlin. Hvis du vil lære mer om biblioteket, kan du sjekke denne artikkelen.

2. Oppsett

Først av alt, la oss lage et Maven-prosjekt og legge til JUnit- og Mockito-avhengigheter i pom.xml:

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

Vi må også fortelle Maven at vi jobber med Kotlin slik at den kompilerer kildekoden for oss. Sjekk ut den offisielle Kotlin-dokumentasjonen for mer informasjon om hvordan du konfigurerer det i pom.xml.

3. Bruke Mockito med Kotlin

Anta at vi har en implementering vi vil teste - LendBookManager. Denne klassen har en avhengighet av en tjeneste, kalt BookService, som ennå ikke er implementert:

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

De BookService injiseres under instantiering av LendBookManager og brukes to ganger i hele Sjekk ut metode, som er metoden vi trenger for å skrive testen vår for:

klasse LendBookManager (val bookService: BookService) {fun checkout (bookId: Int, memberId: Int) {if (bookService.inStock (bookId)) {bookService.lend (bookId, memberId)} else {throw IllegalStateException ("Book is not available ")}}} 

Det ville være vanskelig å skrive enhetstester for den metoden uten å ha muligheten til å spotte BookService - det er der Mockito kommer godt med.

Vi kan, med bare to linjer med kode, lage en narr av BookService grensesnitt og instruere det å returnere en fast verdi når på lager() metoden kalles:

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

Dette vil tvinge mockBookService instans for å komme tilbake ekte når som helst på lager() metoden kalles med argumentet 100 (legg merke til at vi måtte unnslippe når() metode ved hjelp av backtick; dette er påkrevd siden når er et reservert nøkkelord på Kotlin-språket).

Vi kan deretter overføre denne hånede forekomsten til LendBookManager under instantiering, påkalle metoden vi vil teste, og verifisere at låne() metoden ble kalt som et resultat av operasjonen:

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

Vi kan raskt teste den andre logiske veien for implementeringen av metoden vår, som burde kaste et unntak hvis ønsket bok ikke er på lager:

@Test (forventet = IllegalStateException :: klasse) moro nårBookIsNotAvailable_thenAnExceptionIsThrown () {val mockBookService = Mockito.mock (BookService :: class.java) Mockito.`when` (mockBookService. InStock (100)). ThenReturn (false) val manager = LendBookManager (mockBookService) manager.checkout (100, 1)} 

Legg merke til at vi for denne testen fortaltemockBookService å returnere falsk på spørsmål om boka med id 100 var på lager. Dette skulle føre til at Sjekk ut() påkallelse for å kaste en IllegalStateException.

Vi bruker forventet eiendom på @Test kommentar, noe som indikerer at vi forventer at denne testen gir et unntak.

4. MockitoKotlin Bibliotek

Vi kan få koden vår til å se mer Kotlin-ut ved å bruke et open source-bibliotek kalt mockito-kotlin. Dette biblioteket pakker litt av Mockitos funksjonalitet rundt metodene, og gir en enklere API:

@Test moro nårBookIsAvailable_thenLendMethodIsCalled () {val mockBookService: BookService = mock () når (mockBookService.inStock (100)). ThenReturn (true) val manager = LendBookManager (mockBookService) manager.checkout (100, 1) verifiser (mockBookService.) (100, 1)}

Det gir også sin versjon av håne() metode. Når vi bruker denne metoden, kan vi utnytte typeinferanse slik at vi kan ringe metoden uten å overføre ytterligere parametere.

Endelig dette biblioteket avslører et nytt når som helst() metode som kan brukes fritt, uten behov for ryggflått som vi måtte når vi brukte Mockitos innfødte når() metode.

Sjekk wiki-en deres for en komplett liste over forbedringer.

5. Konklusjon

I denne raske opplæringen har vi sett på hvordan vi kan sette opp prosjektet vårt for å bruke Mockito og Kotlin sammen, og hvordan vi kan utnytte denne kombinasjonen for å lage mocks og skrive effektive enhetstester.

Som alltid kan du sjekke ut hele kilden i GitHub-repoen.


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