Animationen testen

Compose bietet ComposeTestRule, mit dem du Tests für Animationen schreiben kannst auf deterministische Weise mit vollständiger Kontrolle über die Testuhr. So können Sie um Zwischenwerte für Animationen zu überprüfen. Außerdem kann ein Test schneller ausgeführt werden, als die tatsächliche Dauer der Animation.

ComposeTestRule gibt die Testuhr als mainClock aus. Sie können die autoAdvance auf „false“, um die Uhr im Testcode zu steuern. Nachher Initiieren der Animation, die getestet werden soll, lässt sich die Uhr mit advanceTimeBy

Hinweis: advanceTimeBy verschiebt die Uhr nicht genau um die angegebene Dauer. Vielmehr rundet sie sie auf die nächste Dauer auf, ein Multiplikator für die Framedauer.

@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()
}