Compose bietet ComposeTestRule, mit dem Sie Tests für Animationen auf deterministische Weise schreiben können und die volle Kontrolle über die Testuhr haben. So können Sie Zwischenwerte der Animation überprüfen. Außerdem kann ein Test schneller ausgeführt werden als die tatsächliche Dauer der Animation.
ComposeTestRule stellt die Testuhr als mainClock zur Verfügung. 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, kann die Uhr mit advanceTimeBy vorwärts bewegt werden.
Beachten Sie, dass advanceTimeBy die Uhr nicht genau um die angegebene Dauer vorwärts bewegt. 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() }
Empfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
- Compose-Layout testen
- Weitere Überlegungen
- Animationen anpassen {:#customize-animations}