Jetpack Compose Academy · leksjon

Teste ViewModel-er og flows

Enhetstest logikk med test-dispatchere.

Leksjon 4 av 413 trinn

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. 🏁

Gratis å komme i gang

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

  1. createComposeRule og findere
  2. Påstander og utføring av handlinger
  3. Semantikk og testtagger
  4. Teste ViewModel-er og flows
← Tilbake til Jetpack Compose Academy