MockK advanced
- Kotlin kursu
- İleri seviye
- Ders 45/83
- 5 dk
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
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
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
coEvery { repo.fetchUser(1) } returns "Ayşe"
// çağrıyı doğrula
____ { repo.fetchUser(1) }
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 |