Testa suspend-funktioner och Flows
Använd runTest och Turbine för att verifiera asynkront beteende.
Testa suspend-funktioner och Flows är en gratis lektion i Kotlin Multiplatform Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Kotlin Multiplatform Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Multiplatform Academy innehåller totalt 4 lektioner.
Asynkront arbete kräver särskilda tester
Suspend-funktioner och Flows blir inte klara direkt, så ni behöver verktyg som väntar på det asynkrona arbetet innan ni gör assertioner. ⏳
Möt runTest
Omslut asynkrona assertioner med runTest från biblioteket coroutines-test. Det tillhandahåller ett scope och hoppar automatiskt över virtuella fördröjningar.
@Test
fun loadsUser() = runTest {
val u = repo.load(1)
assertEquals("Sam", u.name)
}Lägg till testverktyget
Lägg till kotlinx-coroutines-test i commonTest så att runTest och relaterade funktioner är tillgängliga på varje målplattform.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0")Vänta på ett suspend-resultat
I suspend-funktionen anropar du helt enkelt funktionen direkt och gör en kontroll mot det den returnerar.
val total = calc.fetchTotal()
assertEquals(42, total)Tidsfördröjningar hoppas över automatiskt
runTest använder virtuell tid, så en delay på flera sekunder löses omedelbart och testerna förblir snabba.
Testa en Flow manuellt
Du kan samla en ändlig Flow i en lista med toList och kontrollera de värden som skickas ut.
val values = numbers().toList()
assertEquals(listOf(1, 2, 3), values)Därför är Turbine användbart
För pågående strömmar låter biblioteket Turbine dig invänta objekt ett i taget utan manuell hantering av insamlingen.
Lägg till Turbine
Lägg till Turbine i commonTest. Det är ett litet multiplattformsverktyg som är byggt särskilt för att testa Flows.
implementation("app.cash.turbine:turbine:1.1.0")Invänta objekt med test
Turbine omsluter en Flow i ett test-block där awaitItem returnerar varje utskickat värde i rätt ordning.
flow.test {
assertEquals(1, awaitItem())
awaitComplete()
}Avsluta strömmen på rätt sätt
Avsluta varje Turbine-block med awaitComplete eller avbryt det. Annars misslyckas testet på grund av ej konsumerade händelser.
Kontrollera uppdateringar i StateFlow
Turbine är särskilt användbart för StateFlow: invänta startvärdet, utlös en åtgärd och invänta sedan nästa utskickade tillstånd.
Snabbkontroll
Välj rätt asynkrona testomslutning.
Sammanfattning
Använd runTest för suspend-kod och Turbines test-block för att invänta Flow-utskick, allt från commonTest.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Testa suspend-funktioner och Flows” gratis?
Ja – hela texten till ”Testa suspend-funktioner och Flows” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Kotlin Multiplatform Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Kotlin Multiplatform Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Testa suspend-funktioner och Flows”?
Använd runTest och Turbine för att verifiera asynkront beteende. Ni övar på Kotlin Multiplatform Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Kotlin Multiplatform Academy?
Du behöver inga förkunskaper. Utbildningen i Kotlin Multiplatform Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Testa suspend-funktioner och Flows”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Kotlin Multiplatform Academy-lektionen?
Ja. Varje Kotlin Multiplatform Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- kotlin.test i commonTest
- Testa suspend-funktioner och Flows
- Fejka Ktor-klienten och repositorier
- Kör tester på Android- och iOS-mål