Test coroutine
- Kotlin kursu
- İleri seviye
- Ders 43/83
- 5 dk
runTest ile coroutine test öğrenirsin.
runTest ile coroutine test
runTest, kotlinx-coroutines-test kütüphanesinde bir test builder'dır. suspend fonksiyonları test etmek için bir TestScope açar ve gerçek zaman beklemeden sanal zaman kullanır.
Örnek: @Test fun testFetch() = runTest { val result = fetchUser(1); assertEquals("Ayşe", result) }. runTest bloğu içinde suspend çağrılar normal fonksiyon gibi yazılır; delay anında atlanır. Bu yüzden coroutine testleri hızlı ve deterministik çalışır.
TestScope ve delay atlama
runTest bir TestScope döndürür. Bu scope içinde suspend fonksiyonlar normal bir fonksiyon gibi çağrılır. delay çağrıları otomatik olarak atlanır; gerçek bekleme olmaz.
Test için kotlinx-coroutines-test bağımlılığı gerekir. import kotlinx.coroutines.test.runTest ile içe aktarılır. assertEquals ile beklenen değeri kontrol edersin. Bu kalıp, coroutine testlerini hızlı ve öngörülebilir kılar.
Uygulama suspend fonksiyonu runTest ile test et
fetchUser(id: Int): String adında bir suspend fonksiyon tanımla; id 1 için "Ayşe" döndürsün. main içinde runTest bloğu aç ve fetchUser(1) sonucunu println ile yazdır.
Başlangıç kodu
import kotlinx.coroutines.test.runTest
// suspend fonksiyon: id 1 için Ayşe döndür
// main'de runTest bloğu aç ve sonucu yazdırÖrnek çözüm
import kotlinx.coroutines.test.runTest
suspend fun fetchUser(id: Int): String {
return "Ayşe"
}
fun main() = runTest {
println(fetchUser(1))
}Beklenen çıktı
Ayşe
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 runTest bloğu içinde aşağıdakilerden hangisi doğrudan yapılabilir?
- Sadece senkron fonksiyon çağrısı
- suspend fonksiyon çağrısı Doğru cevap
- Sadece UI çizimi
- Yalnızca dosya okuma
Açıklama: runTest bir TestScope sağlar; suspend çağrılar doğrudan yapılır.
2 runTest bloğunu tamamla
@Test
fun testFetch() = ____ {
val result = fetchUser(1)
assertEquals("Ayşe", result)
}
@Test
fun testFetch() = runTest {
val result = fetchUser(1)
assertEquals("Ayşe", result)
}
Açıklama: runTest, suspend fonksiyonlar için TestScope açar.
3 runTest parçalarını eşle
| Kavram | Anlamı |
|---|---|
runTest { } |
Test builder |
TestScope |
Sağlanan scope |
suspend fetch() |
Çağrılan fonksiyon |
delay |
Atlanan bekleme |