CodeBlanks Logo Icon CodeBlanks

Turbine

Turbine ile Flow test öğrenirsin.

Turbine ile Flow test

Turbine, Kotlin Flow'larını test etmek için bir kütüphanedir. flow.test { } ile akışı abone olur; awaitItem ve awaitComplete ile sıradaki öğeyi ve tamamlanmayı bekler.

Örnek: val flow = flowOf(1, 2, 3); flow.test { assertEquals(1, awaitItem()); assertEquals(2, awaitItem()); awaitComplete() }. Turbine, akıştaki öğeleri sırayla kontrol etmeyi kolaylaştırır; zamanlama hatalarını ortadan kaldırır.

awaitItem ve awaitComplete

awaitItem, akıştaki bir sonraki öğeyi döndürür. awaitComplete ise akışın tamamlandığını doğrular. Bu iki metot, akışı adım adım test etmenin temelidir.

Örnek: flow.test { val first = awaitItem(); val second = awaitItem(); awaitComplete() }. awaitItem her çağrıda sıradaki öğeyi verir. Sıra bozulursa test başarısız olur. Böylece akışın doğru sırayla yaydığı öğeler garantilenir.

Uygulama Flow akışını Turbine ile test et

scoreFlow adında flowOf(10, 20, 30) döndüren bir fonksiyon tanımla. main içinde scoreFlow().test { } bloğu aç; üç awaitItem() çağrısının sonucunu println ile yazdır.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.flow.flowOf
import app.cash.turbine.test

// scoreFlow fonksiyonu: üç tam sayı yay
// main'de test bloğu aç ve awaitItem sonuçlarını yazdır

Örnek çözüm

Main.kt
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.Flow
import app.cash.turbine.test

fun scoreFlow(): Flow<Int> = flowOf(10, 20, 30)

fun main() = scoreFlow().test {
    println(awaitItem())
    println(awaitItem())
    println(awaitItem())
}

Beklenen çıktı

10
20
30

Soru ve cevaplar

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

1 .test bloğunu tamamla

Soru
val flow = flowOf(1, 2, 3)
flow.____ {
    assertEquals(1, awaitItem())
    awaitComplete()
}
Cevap
val flow = flowOf(1, 2, 3)
flow.test {
    assertEquals(1, awaitItem())
    awaitComplete()
}

Açıklama: flow.test { } akışı abone olur ve öğeleri bekler.

2 Turbine ile bir Flow akışını test ederken sıradaki öğeyi almak için hangi metot kullanılır?

  • collect
  • next
  • awaitItem Doğru cevap
  • fetch

Açıklama: awaitItem, akışın sıradaki öğesini döndürür.

3 Turbine metotlarını eşle

Kavram Anlamı
flow.test { } Abonelik başlatma
awaitItem() Sıradaki öğe
awaitComplete() Tamamlanma
expectNoEvents() Olay yokluğu

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