CodeBlanks Logo Icon CodeBlanks

MockK advanced

Gelişmiş MockK (coEvery, coVerify) öğrenirsin.

MockK: coEvery ve coVerify

MockK, Kotlin için popüler bir mocklama kütüphanesidir. suspend fonksiyonlar için coEvery ile davranış tanımlar, coVerify ile çağrıldığını doğrularsın.

Örnek: coEvery { repo.fetchUser(1) } returns "Ayşe". Bu, repo.fetchUser(1) çağrıldığında "Ayşe" döndürür. Test sonunda coVerify { repo.fetchUser(1) } ile çağrıldığını kontrol edersin. MockK, suspend çağrıları test ortamında güvenli şekilde taklit etmeni sağlar.

slot ile argüman yakalama

MockK'in slot özelliği, mock'a geçirilen argümanı yakalar. Özellikle callback'lerde ve suspend çağrılarda işe yarar.

Örnek: val idSlot = slot<Int>(); coEvery { repo.fetchUser(capture(idSlot)) } returns "Ayşe". Çağrıdan sonra idSlot.captured ile geçirilen değeri okursun. Bu kalıp, gerçek argüman değerini sonradan doğrulamak için kullanılır.

Uygulama Suspend repository'yi mockla

UserRepo adında interface tanımla; suspend fun fetchUser(id: Int): String metodu olsun. main içinde mockk<UserRepo>() ile mock oluştur, coEvery { repo.fetchUser(1) } returns "Ayşe" yaz ve runTest bloğunda println(repo.fetchUser(1)) çağrısı ekle.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.test.runTest
import io.mockk.mockk
import io.mockk.coEvery

// UserRepo interface: kullanıcı getirme metodu
// main'de mock oluştur, coEvery ile davranış tanımla, runTest içinde yazdır

Örnek çözüm

Main.kt
import kotlinx.coroutines.test.runTest
import io.mockk.mockk
import io.mockk.coEvery

interface UserRepo {
    suspend fun fetchUser(id: Int): String
}

fun main() {
    val repo = mockk<UserRepo>()
    coEvery { repo.fetchUser(1) } returns "Ayşe"
    runTest {
        println(repo.fetchUser(1))
    }
}

Beklenen çıktı

Ayşe

Soru ve cevaplar

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

1 MockK ile suspend fonksiyonun dönüş değerini tanımlamak için hangi fonksiyon kullanılır?

  • given
  • every
  • when
  • coEvery Doğru cevap

Açıklama: coEvery suspend fonksiyonlar içindir.

2 coVerify çağrısını tamamla

Soru
coEvery { repo.fetchUser(1) } returns "Ayşe"
// çağrıyı doğrula
____ { repo.fetchUser(1) }
Cevap
coEvery { repo.fetchUser(1) } returns "Ayşe"
// çağrıyı doğrula
coVerify { repo.fetchUser(1) }

Açıklama: coVerify, suspend çağrıyı doğrular.

3 MockK parçalarını eşle

Kavram Anlamı
coEvery { } Davranış tanımı
returns Dönüş değeri
coVerify { } Çağrı doğrulama
slot<T>() Argüman yakalama

İleri seviye bölümündeki tüm dersler