Compose bietet ComposeTestRule
, mit der Sie Tests für Animationen deterministisch mit voller Kontrolle über die Testuhr schreiben können. So können Sie Zwischenanimationswerte 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 das Attribut autoAdvance
auf „false“ setzen, um die Uhr in Ihrem Testcode zu steuern. Nachdem die zu testende Animation gestartet wurde, kann die Uhr mit advanceTimeBy
vorgezogen werden.
Dabei ist zu beachten, dass advanceTimeBy
die Uhr nicht genau um die angegebene Dauer verschiebt. Stattdessen wird sie auf die nächste Dauer aufgerundet, die ein Multiplikator 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() }
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Layout von „Compose“ testen
- Weitere Überlegungen
- Animationen anpassen {:#customize-animations}