اختبار الدوال المعلّقة وFlows
استخدم runTest وTurbine للتحقق من السلوك غير المتزامن.
اختبار الدوال المعلّقة وFlows درس مجاني في Kotlin Multiplatform Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Multiplatform Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Multiplatform Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Async Needs Special Tests
Suspend functions and Flows do not finish instantly, so you need tools that wait for async work before asserting. ⏳
Meet runTest
Wrap async assertions in runTest from the coroutines-test library; it provides a scope and skips virtual delays automatically.
@Test
fun loadsUser() = runTest {
val u = repo.load(1)
assertEquals("Sam", u.name)
}Add the Test Helper
Pull kotlinx-coroutines-test into commonTest so runTest and friends are available on every target.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0")Awaiting a suspend Result
Inside runTest you simply call the suspend function directly and assert on whatever it returns.
val total = calc.fetchTotal()
assertEquals(42, total)Time Skips for Free
runTest uses virtual time, so a delay of seconds resolves immediately and your tests stay fast.
Testing a Flow by Hand
You can collect a finite Flow into a list with toList and assert on the emitted values.
val values = numbers().toList()
assertEquals(listOf(1, 2, 3), values)Why Turbine Helps
For ongoing streams, the Turbine library lets you await items one at a time without manual collection plumbing.
Add Turbine
Drop Turbine into commonTest; it is a tiny multiplatform helper built just for testing Flows.
implementation("app.cash.turbine:turbine:1.1.0")Await Items with test
Turbine wraps a Flow in a test block where awaitItem returns each emission in order.
flow.test {
assertEquals(1, awaitItem())
awaitComplete()
}Finish the Stream Cleanly
End every Turbine block with awaitComplete or cancel, or the test fails for unconsumed events.
Assert StateFlow Updates
Turbine shines on StateFlow: await the initial value, trigger an action, then await the next emitted state.
Quick Check
Pick the right async test wrapper.
Recap
Use runTest for suspend code and Turbine's test block to await Flow emissions, all from commonTest.
الأسئلة الشائعة
هل درس «اختبار الدوال المعلّقة وFlows» مجاني؟
نعم — نص درس «اختبار الدوال المعلّقة وFlows» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Multiplatform Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Multiplatform Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختبار الدوال المعلّقة وFlows»؟
استخدم runTest وTurbine للتحقق من السلوك غير المتزامن. تتمرن على Kotlin Multiplatform Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Multiplatform Academy؟
لا تُشترط خبرة سابقة. Kotlin Multiplatform Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «اختبار الدوال المعلّقة وFlows»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Multiplatform Academy هذا؟
نعم. كل درس في Kotlin Multiplatform Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- kotlin.test في commonTest
- اختبار الدوال المعلّقة وFlows
- محاكاة Ktor Client والمستودعات
- تشغيل الاختبارات على أهداف Android وiOS