Teste ViewModel-er og flows
Enhetstest logikk med test-dispatchere.
Teste ViewModel-er og flows er en gratis leksjon i Jetpack Compose Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Jetpack Compose Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Jetpack Compose Academy inneholder totalt 4 leksjoner.
Test logikken uten brukergrensesnittet
En ViewModel inneholder logikken for skjermbildet, slik at De kan teste den direkte med vanlig JUnit. Ingen emulator eller gjengivelse er nødvendig, noe som gjør disse testene raske. ⚡
Arrange, Act, Assert
ViewModel-tester følger en enkel rytme: opprett ViewModel-en, kall en funksjon, og kontroller deretter den nye tilstanden. Hold hver test fokusert på én atferd.
val vm = CounterViewModel()
vm.increment()
assertEquals(1, vm.count)Coroutine-utfordringen
Mange ViewModel-er starter coroutiner som kjører på Dispatchers.Main. I tester finnes det ingen hoved-Looper, så De må bytte inn en test dispatcher i stedet.
StandardTestDispatcher
En StandardTestDispatcher gir Dem full kontroll over tidspunktet coroutinene kjører på. Oppgaver legges i kø og kjører først når De flytter den virtuelle klokken fremover.
val dispatcher = StandardTestDispatcher()Bytt ut Main-dispatcheren
Bruk Dispatchers.setMain før hver test for å sette inn test-dispatcheren, og kall deretter resetMain for å la den globale tilstanden være ryddig.
Dispatchers.setMain(dispatcher)runTest
Pakk testkropper som kan suspendere, inn i runTest. Den gir et coroutine-område med en virtuell klokke, slik at forsinkelser løses umiddelbart i stedet for etter virkelige sekunder.
@Test fun loads() = runTest {
// suspend calls run here
}Hurtigsjekk
ViewModel-en starter coroutiner på hoved-dispatcheren. Hva lar en enhetstest kontrollere kjøringen deres?
Flytte klokken fremover
Med en StandardTestDispatcher må coroutiner i kø vente. Kall advanceUntilIdle inne i runTest for å kjøre dem alle, og kontroller deretter den endelige tilstanden.
advanceUntilIdle()
assertEquals(Loaded, vm.uiState.value)Teste en StateFlow
ViewModel-er eksponerer ofte en StateFlow. Det gjeldende øyeblikksbildet ligger i .value, slik at De kan lese og kontrollere det direkte etter at klokken er flyttet fremover.
assertEquals(0, vm.count.value)Samle inn Flow-utslipp
For å fange opp en sekvens av utslipp gjør Turbine-biblioteket Flow-testing enkelt med awaitItem, der hver verdi kontrolleres når den kommer.
vm.events.test {
assertEquals(Saved, awaitItem())
}Bruk falske avhengigheter
Sett inn et falskt repository som returnerer forhåndsdefinerte data. Da forblir testene raske, og De kan simulere både vellykkede og mislykkede forløp uten et ekte nettverk.
val vm = NewsViewModel(FakeRepo())Ryddig opprydding
Kombiner alltid setMain med resetMain i oppryddingen. En installert test-dispatcher kan lekke inn i og ødelegge andre tester i testpakken.
@After fun tearDown() {
Dispatchers.resetMain()
}Oppsummering: ViewModel-er og Flow-er
Test logikk uten brukergrensesnitt ved å sette inn en test dispatcher, kjøre koden i runTest og kontrollere StateFlow-verdier. Raske, fokuserte og pålitelige tester. 🏁
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Teste ViewModel-er og flows» gratis?
Ja – hele teksten i «Teste ViewModel-er og flows» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Jetpack Compose Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Jetpack Compose Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Teste ViewModel-er og flows»?
Enhetstest logikk med test-dispatchere. Du øver på Jetpack Compose Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Jetpack Compose Academy?
Ingen tidligere erfaring er nødvendig. Jetpack Compose Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Teste ViewModel-er og flows»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Jetpack Compose Academy-leksjonen?
Ja. Alle Jetpack Compose Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- createComposeRule og findere
- Påstander og utføring av handlinger
- Semantikk og testtagger
- Teste ViewModel-er og flows