Animationen testen

Compose bietet ComposeTestRule, mit dem Sie Tests für Animationen deterministisch schreiben und die Testuhr vollständig steuern können. So können Sie Zwischenwerte der Animation prüfen. Außerdem kann ein Test schneller ausgeführt werden als die tatsächliche Dauer der Animation.

ComposeTestRule stellt seine Testuhr als mainClock bereit. Sie können die Eigenschaft autoAdvance auf „false“ setzen, um die Uhr in Ihrem Testcode zu steuern. Nachdem Sie die zu testende Animation gestartet haben, können Sie die Uhr mit advanceTimeBy vorspulen.

Beachten Sie, dass advanceTimeBy die Uhr nicht genau um die angegebene Dauer verschiebt. Stattdessen wird sie auf die nächste Dauer aufgerundet, die ein Vielfaches der Framedauer ist.

@get:Rule
val rule = createComposeRule()

@Test
fun testAnimationWithClock() {
    // Pause animations
    rule.mainClock.autoAdvance = false
    var enabled by mutableStateOf(false)
    rule.setContent {
        val color by animateColorAsState(
            targetValue = if (enabled) Color.Red else Color.Green,
            animationSpec = tween(durationMillis = 250)
        )
        Box(Modifier.size(64.dp).background(color))
    }

    // Initiate the animation.
    enabled = true

    // Let the animation proceed.
    rule.mainClock.advanceTimeBy(50L)

    // Compare the result with the image showing the expected result.
    // `assertAgainGolden` needs to be implemented in your code.
    rule.onRoot().captureToImage().assertAgainstGolden()
}