Compose предлагает ComposeTestRule
, который позволяет вам писать тесты для анимации детерминированным способом с полным контролем над тактовой частотой теста. Это позволяет вам проверять промежуточные значения анимации. Кроме того, тест может выполняться быстрее, чем фактическая продолжительность анимации.
ComposeTestRule
предоставляет свои тестовые часы как mainClock
. Вы можете установить для свойства autoAdvance
значение false, чтобы управлять часами в тестовом коде. После запуска анимации, которую вы хотите протестировать, часы можно перевести вперед с помощью advanceTimeBy
.
Здесь следует отметить, что advanceTimeBy
не перемещает часы точно на указанную продолжительность. Скорее, он округляет его до ближайшей продолжительности, которая является множителем длительности кадра.
@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() }
Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Тестирование макета Compose
- Другие соображения
- Настройка анимации {:#customize-animations}