Kotlin Mockitóval

1. Bemutatkozás

Kotlin és Java kéz a kézben járnak. Ez azt jelenti, hogy a létező Java könyvtárak rengeteg számát felhasználhatjuk Kotlin projektjeink során.

Ebben a rövid cikkben megnézzük, hogyan gúnyolódhatunk a Mockito segítségével Kotlinban. Ha többet szeretne megtudni a könyvtárról, nézze meg ezt a cikket.

2. Beállítás

Először hozzunk létre egy Maven projektet, és adjunk hozzá JUnit és Mockito függőségeket a pom.xml:

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

Azt is el kell mondanunk Mavennek, hogy együttműködünk Kotlinnal, hogy az állítsa össze nekünk a forráskódot. Nézze meg a Kotlin hivatalos dokumentációját, ha további információt szeretne arról, hogyan konfigurálja azt a pom.xml.

3. Használata Mockito val vel Kotlin

Tegyük fel, hogy van olyan megvalósításunk, amelyet tesztelni akarunk - LendBookManager. Ez az osztály függ az ún BookService, amelyet még nem hajtottak végre:

felület BookService {fun inStock (bookId: Int): Logikai szórakozás kölcsönözni (bookId: Int, memberId: Int)} 

A BookService injekciója során a LendBookManager és kétszer használják az egész pénztár módszer, amelyre a teszt megírásához szükségünk van:

class LendBookManager (val bookService: BookService) {fun checkout (bookId: Int, memberId: Int) {if (bookService.inStock (bookId)) {bookService.lend (bookId, memberId)} else {dobja IllegalStateException ("A könyv nem elérhető ")}}} 

Nehéz lenne egység teszteket írni a módszerhez anélkül, hogy képes lenne gúnyolódni BookService - itt jön jól Mockito.

Csak két kódsorral hozhatunk létre egy modellt BookService interfészt, és utasítsa vissza egy fix érték visszaadására, amikor a raktáron() módszer neve:

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

Ez kényszeríteni fogja a mockBookService például visszatérni igaz valahányszor a raktáron() metódust a 100 érvvel hívjuk meg (vegyük észre, hogy ki kellett menekülnünk a mikor() módszer a backtick használatával; erre szükség van, mivel mikor fenntartott kulcsszó a Kotlin nyelven).

Ezután átadhatjuk ezt a kigúnyolt példányt LendBookManager a példányosítás során hívja meg a tesztelni kívánt módszert, és ellenőrizze, hogy a kölcsönöz() metódust hívták meg a művelet eredményeként:

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

Gyorsan tesztelhetjük módszerünk megvalósításának másik logikai útját, amely kivételt jelenthet, ha a kívánt könyv nincs raktáron:

@Test (várható = IllegalStateException :: class) szórakoztató, amikorBookIsNotAvailable_thenAnExceptionIsThrown () {val mockBookService = Mockito.mock (BookService :: class.java) Mockito.`when` (mockBookService. InStock (100)) falseRetre (false) thenRetet (false). LendBookManager (mockBookService) manager.checkout (100, 1)} 

Észrevette, hogy ehhez a teszthez mi mondtamockBookService visszatérni hamis amikor megkérdezték, hogy a 100 azonosítójú könyv van-e raktáron. Ez okozhatja a pénztár () felszólítás dobni egy IllegalStateException.

Használjuk a várt ingatlan a @Teszt megjegyzés, jelezve, hogy elvárjuk, hogy ez a teszt kivételt tegyen.

4. MockitoKotlin Könyvtár

A mockito-kotlin nevű nyílt forráskódú könyvtár segítségével a kódunkat jobban Kotlin-szerűvé tehetjük. Ez a könyvtár a Mockito funkcionalitásának köré fonja a módszereit, egyszerűbb API-t biztosítva:

@Test fun whenBookIsAvailable_thenLendMethodIsCalled () {val mockBookService: BookService = mock () when (mockBookService.inStock (100)). ThenReturn (true) val manager = LendBookManager (mockBookService) manager.checkout (100, 1). (100, 1)}

Megadja a gúny () módszer. Ennek a módszernek a felhasználásával kihasználhatjuk a típus következtetéseit, így további paraméterek megadása nélkül hívhatjuk meg a módszert.

Végül ez könyvtár egy új bármikor() módszer, amely szabadon felhasználható, anélkül, hogy szükség lenne olyan kullancsokra, mint Mockito őshonosának használata esetén mikor() módszer.

Ellenőrizze a wikijükön a fejlesztések teljes listáját.

5. Következtetés

Ebben a gyors bemutatóban megvizsgáltuk, hogyan állíthatjuk be projektünket Mockito és Kotlin együttes használatára, és hogyan használhatjuk fel ezt a kombinációt gúnyok létrehozására és hatékony egységtesztek megírására.

Mint mindig, a teljes forrást a GitHub repóban tekintheti meg.