CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

Main.kt
interface WeatherService {
    fun temperature(place: String): Int
}

// FakeWeatherService: WeatherService uygulayan sahte sınıf, 20 döndürsün
// WeatherApp: service alır, report(place) metodu "$place: {temp}C" döndürsün
// main: FakeWeatherService ile WeatherApp oluştur, "İstanbul" için raporu yazdır
fun main() {
    // buraya yaz
}

Örnek çözüm

Main.kt
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"))
}

Beklenen çıktı

İstanbul: 20C

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 MockK ne için kullanılır?

  • Bağımlılıkları testte sahtelemek Doğru cevap
  • Arayüz çizmek
  • Veri tabanı sorgulamak
  • Dosya sıkıştırmak

Açıklama: MockK, testte bağımlılıkların davranışını taklit eder.

2 Sahte nesne oluştur

Soru
val service = ____<WeatherService>()
Cevap
val service = mockk<WeatherService>()

Açıklama: mockk<WeatherService>() bir sahte nesne oluşturur.

3 MockK fonksiyonlarını eşle

Kavram Anlamı
mockk<T>() Sahte oluştur
every { } Davranış tanımla
verify { } Çağrı denetle
returns Dönüş değeri

Orta seviye bölümündeki tüm dersler