MockK
- Kotlin kursu
- Orta seviye
- Ders 110/116
- 5 dk
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
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
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
val service = ____<WeatherService>()
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 |