Testa ViewModels och Flows
Enhetstesta logik med testdispatörer.
Testa ViewModels och Flows är en gratis lektion i Jetpack Compose Academy på CoddyKit. Detta är lektion 4 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 Jetpack Compose Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Jetpack Compose Academy innehåller totalt 4 lektioner.
Testa logik utan gränssnittet
En ViewModel innehåller skärmlogiken, så att Ni kan testa den direkt med vanlig JUnit. Ingen emulator eller rendering behövs, vilket gör dessa tester snabba. ⚡
Förbered, agera, kontrollera
ViewModel-tester följer en enkel rytm: skapa ViewModel, anropa en funktion och kontrollera sedan det nya tillståndet. Fokusera varje test på ett beteende.
val vm = CounterViewModel()
vm.increment()
assertEquals(1, vm.count)Utmaningen med coroutines
Många ViewModels startar coroutines som körs på Dispatchers.Main. I tester finns ingen huvud-loop, så Ni måste i stället byta till en testdispatcher.
StandardTestDispatcher
En StandardTestDispatcher ger Er full kontroll över när coroutines körs. Uppgifter köas och körs först när Ni flyttar fram den virtuella klockan.
val dispatcher = StandardTestDispatcher()Ersätt Main-dispatchern
Använd Dispatchers.setMain före varje test för att injicera testdispatchern och anropa sedan resetMain efteråt för att lämna det globala tillståndet rent.
Dispatchers.setMain(dispatcher)runTest
Omslut testkroppar som använder suspendering med runTest. Det tillhandahåller en coroutine-scope med en virtuell klocka, så att fördröjningar löses direkt i stället för efter verkliga sekunder.
@Test fun loads() = runTest {
// suspend calls run here
}Snabb kontroll
Er ViewModel startar coroutines på huvuddispatchern. Vad gör att ett enhetstest kan styra deras körning?
Flytta fram klockan
Med en StandardTestDispatcher väntar köade coroutines. Anropa advanceUntilIdle i runTest för att köra dem alla och kontrollera sedan det slutliga tillståndet.
advanceUntilIdle()
assertEquals(Loaded, vm.uiState.value)Testa en StateFlow
ViewModels exponerar ofta en StateFlow. Den aktuella ögonblicksbilden finns i .value, så Ni kan läsa och kontrollera den direkt efter att klockan flyttats fram.
assertEquals(0, vm.count.value)Samla in Flow-emissioner
För att fånga en sekvens av emissioner gör biblioteket Turbine Flow-testning enkel med awaitItem, där varje värde kontrolleras när det kommer.
vm.events.test {
assertEquals(Saved, awaitItem())
}Använd falska beroenden
Injicera ett falskt repository som returnerar förberedda data. Det håller testerna snabba och låter Er simulera lyckade och misslyckade flöden utan ett riktigt nätverk.
val vm = NewsViewModel(FakeRepo())Ren nedmontering
Kombinera alltid setMain med resetMain i nedmonteringen. En kvarlämnad testdispatcher kan läcka in i och orsaka fel i andra tester i testsviten.
@After fun tearDown() {
Dispatchers.resetMain()
}Repetition: ViewModels och Flows
Testa logik utan UI genom att byta till en testdispatcher, köra koden i runTest och kontrollera StateFlow-värden. Snabba, fokuserade och tillförlitliga tester. 🏁
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 ViewModels och Flows” gratis?
Ja – hela texten till ”Testa ViewModels 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 Jetpack Compose Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Jetpack Compose Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Testa ViewModels och Flows”?
Enhetstesta logik med testdispatörer. Ni övar på Jetpack Compose 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 Jetpack Compose Academy?
Du behöver inga förkunskaper. Utbildningen i Jetpack Compose 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 4 av 4.
Hur lång tid tar lektionen ”Testa ViewModels 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 Jetpack Compose Academy-lektionen?
Ja. Varje Jetpack Compose 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
- createComposeRule och sökare
- Påståenden och åtgärder
- Semantik och testtaggar
- Testa ViewModels och Flows