Compose bietet ComposeTestRule
, mit dem Sie Tests für Animationen auf deterministische Weise mit vollständiger Kontrolle über die Testuhr schreiben können. So können Sie die Zwischenwerte der Animation prüfen. Außerdem kann ein Test schneller ausgeführt werden als die tatsächliche Dauer der Animation.
ComposeTestRule
gibt die Testuhr als mainClock
aus. Du kannst das Attribut autoAdvance
auf „false“ setzen, um die Uhr im Testcode zu steuern. Nachdem Sie die zu testende Animation initiiert haben, kann die Uhr mit advanceTimeBy
weiter verschoben werden.
Hinweis: advanceTimeBy
verschiebt die Uhr nicht genau um die angegebene Dauer. Stattdessen rundet er sie auf die nächste Dauer auf, 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 Hinweise
- Animationen anpassen {:#customize-animations}