Jetpack Compose Academy · Les

ViewModels en Flows testen

Test logica met testdispatchers in unittests.

Les 4 van 413 stappen

ViewModels en Flows testen is een gratis Jetpack Compose Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Jetpack Compose Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Jetpack Compose Academy bevat in totaal 4 lessen.

Logica testen zonder de UI

Een ViewModel bevat de logica van je scherm, zodat je deze rechtstreeks met gewone JUnit kunt testen. Je hebt geen emulator of rendering nodig, waardoor deze tests snel zijn. ⚡

Voorbereiden, uitvoeren, controleren

ViewModel-tests volgen een eenvoudig ritme: maak de ViewModel, roep een functie aan en controleer daarna de nieuwe state. Houd elke test gericht op één gedrag.

val vm = CounterViewModel()
vm.increment()
assertEquals(1, vm.count)

De coroutine-uitdaging

Veel ViewModels starten coroutines die op Dispatchers.Main worden uitgevoerd. In tests is er geen main looper, dus moet je in plaats daarvan een test dispatcher gebruiken.

StandardTestDispatcher

Met een StandardTestDispatcher krijg je volledige controle over de timing van coroutines. Taken worden in een wachtrij geplaatst en alleen uitgevoerd wanneer je de virtuele klok vooruitzet.

val dispatcher = StandardTestDispatcher()

Vervang de Main-dispatcher

Gebruik Dispatchers.setMain vóór elke test om je test dispatcher te injecteren. Roep daarna resetMain aan om de globale status schoon achter te laten.

Dispatchers.setMain(dispatcher)

runTest

Wikkel bodies van tests die kunnen opschorten in runTest. Deze biedt een coroutine-scope met een virtuele klok, zodat vertragingen direct worden opgelost in plaats van na echte seconden.

@Test fun loads() = runTest {
    // suspend calls run here
}

Snelle controle

Je ViewModel start coroutines op de Main-dispatcher. Wat geeft een unitt est controle over de uitvoering daarvan?

De klok vooruitzetten

Met een StandardTestDispatcher wachten coroutines in de wachtrij. Roep binnen runTest advanceUntilIdle aan om ze allemaal uit te voeren en controleer daarna de uiteindelijke status.

advanceUntilIdle()
assertEquals(Loaded, vm.uiState.value)

Een StateFlow testen

ViewModels bieden vaak een StateFlow. De huidige momentopname staat in .value, zodat je deze rechtstreeks kunt uitlezen en controleren nadat je de klok vooruit hebt gezet.

assertEquals(0, vm.count.value)

Flow-emissies verzamelen

Om een reeks emissies vast te leggen, maakt de Turbine-bibliotheek Flow-testen eenvoudig met awaitItem, waarbij je elke waarde controleert zodra deze binnenkomt.

vm.events.test {
    assertEquals(Saved, awaitItem())
}

Doe alsof je afhankelijkheden echt zijn

Injecteer een neprepository die vooraf bepaalde gegevens teruggeeft. Zo blijven tests snel en kun je succes- en foutpaden simuleren zonder een echt netwerk.

val vm = NewsViewModel(FakeRepo())

Netjes opruimen

Combineer setMain bij het opruimen altijd met resetMain. Een geïnstalleerde test dispatcher kan anders uitlekken naar andere tests en deze in de testsuite laten mislukken.

@After fun tearDown() {
    Dispatchers.resetMain()
}

Samenvatting: ViewModels en Flows

Test logica zonder UI door een test dispatcher te gebruiken, code in runTest uit te voeren en StateFlow-waarden te controleren. Snelle, gerichte, betrouwbare tests. 🏁

Gratis beginnen

Leer Kotlin met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “ViewModels en Flows testen” gratis?

Ja — de volledige tekst van “ViewModels en Flows testen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Jetpack Compose Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Jetpack Compose Academy bevat in totaal 4 lessen.

Wat leer ik in “ViewModels en Flows testen”?

Test logica met testdispatchers in unittests. Je oefent met Jetpack Compose Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Jetpack Compose Academy te beginnen?

Ervaring vooraf is niet nodig. Jetpack Compose Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “ViewModels en Flows testen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Jetpack Compose Academy?

Ja. Elke les over Jetpack Compose Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. createComposeRule en finders
  2. Assertions en acties uitvoeren
  3. Semantics en testtags
  4. ViewModels en Flows testen
← Terug naar Jetpack Compose Academy