A ComposeTestRule
oferecida pelo Compose permite programar testes de animações
de forma determinística, com controle total sobre o relógio de teste. Isso permite
verificar valores de animação intermediários. Além disso, a duração do teste pode ser menor
do que a da animação.
A ComposeTestRule
exibe o relógio de teste como mainClock
. Você pode definir
a propriedade autoAdvance
como "false" no código de teste para controlar o relógio. Depois
de iniciar a animação a ser testada, o relógio pode ser adiantado com
advanceTimeBy
.
Observe que o advanceTimeBy
não adianta o relógio exatamente de acordo com a
duração especificada. Em vez disso, a duração é arredondada para o valor mais próximo
que corresponda a um multiplicador da duração do frame.
@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() }
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Como testar o layout do Compose
- Outras considerações
- Personalizar animações {:#customize-animations}