Animationen testen

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

ComposeTestRule stellt seine Testuhr als mainClock zur Verfügung. Sie können das Attribut autoAdvance auf „false“ setzen, um die Zeit in Ihrem Testcode zu steuern. Nachdem Sie die Animation gestartet haben, die Sie testen möchten, kann die Uhr mit advanceTimeBy vorgespult werden.

advanceTimeBy verschiebt die Zeit nicht genau um die angegebene Dauer. Stattdessen wird die Dauer auf die nächste Dauer aufgerundet, die ein Vielfaches der Frame-Dauer 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()
}