Kotlin
MockK
MockK ile mock öğrenirsin.
MockK: Sahteleme kütüphanesi
MockK, Kotlin için bir sahteleme (mocking) kütüphanesidir. Test sırasında bağımlılıkların davranışını taklit eder; böylece gerçek veri tabanı veya ağ çağrısı yapmadan test yazarsın. mockk<T>() bir sahte nesne oluşturur, every { } davranış tanımlar, verify { } çağrıyı denetler.
val service = mockk<WeatherService>()
every { service.temperature(any()) } returns 20
verify { service.temperature("İstanbul") }
Burada WeatherService sahtelenir; temperature çağrısı her zaman 20 döndürür. verify, metodun belirli argümanla çağrıldığını denetler. MockK, Kotlin'in suspend ve extension fonksiyonlarını da destekler; bu yüzden Kotlin'de yaygın tercihtir.
Fake deseni
MockK'i kullanmadan önce, sahteleme kavramını anlamak için fake deseni kullanışlıdır. Bir fake, bir arayüzü uygulayan ve testte öngörülebilir davranış sunan el yapımı bir sınıftır. Bu, MockK'nin arka planda yaptığını açıkça gösterir.
interface Greeter {
fun greet(name: String): String
}
class FakeGreeter : Greeter {
override fun greet(name: String) = "Merhaba, $name!"
}
Burada FakeGreeter, Greeter arayüzünü uygular ve her zaman sabit bir sonuç döndürür. Test, bu sahteyi kullanır; gerçek bir kaynağa bağımlı değildir. MockK ise bu sahteyi otomatik üretir; mockk ile her arayüz için sahte oluşturulur.
Uygulama Fake service deseni uygula
interface WeatherService tanımla; içinde fun temperature(place: String): Int olsun. class FakeWeatherService : WeatherService tanımla; temperature her zaman 20 döndürsün. class WeatherApp(private val service: WeatherService) tanımla; fun report(place: String): String gövdesi "$place: ${service.temperature(place)}C" döndürsün. main içinde val app = WeatherApp(FakeWeatherService()) oluştur; println(app.report("İstanbul")) yazdır.
Örnek çözümü göster
interface WeatherService {
fun temperature(place: String): Int
}
class FakeWeatherService : WeatherService {
override fun temperature(place: String): Int = 20
}
class WeatherApp(private val service: WeatherService) {
fun report(place: String): String = "$place: ${service.temperature(place)}C"
}
fun main() {
val app = WeatherApp(FakeWeatherService())
println(app.report("İstanbul"))
}
Kendini test et
-
MockK ne için kullanılır?
- Bağımlılıkları testte sahtelemek
- Arayüz çizmek
- Veri tabanı sorgulamak
- Dosya sıkıştırmak
Cevabı göster
Bağımlılıkları testte sahtelemek — MockK, testte bağımlılıkların davranışını taklit eder.
-
Sahte nesne oluştur
val service = ____<WeatherService>()
Cevabı göster
val service = mockk<WeatherService>()
-
MockK fonksiyonlarını eşle
- mockk<T>()
- Sahte oluştur
- every { }
- Davranış tanımla
- verify { }
- Çağrı denetle
- returns
- Dönüş değeri
Sıradaki ders: Özet - Test