Turbine
- Kotlin kursu
- İleri seviye
- Ders 44/83
- 5 dk
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
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
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
val flow = flowOf(1, 2, 3)
flow.____ {
assertEquals(1, awaitItem())
awaitComplete()
}
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 |