Animasyonları test etme

Compose, test saati üzerinde tam kontrol sağlayarak animasyonlar için testleri deterministik bir şekilde yazmanıza olanak tanıyan ComposeTestRule sunar. Bu sayede, ara animasyon değerlerini doğrulayabilirsiniz. Ayrıca, testler animasyon süresinden daha hızlı çalışabilir.

ComposeTestRule, test saatini mainClock olarak gösterir. Test kodunuzdaki saati kontrol etmek için autoAdvance özelliğini false (yanlış) olarak ayarlayabilirsiniz. Test etmek istediğiniz animasyon başlatıldıktan sonra saat advanceTimeBy ile ileri alınabilir.

Burada dikkat edilmesi gereken bir nokta, advanceTimeBy işlevinin saati tam olarak belirtilen süre kadar hareket ettirmemesidir. Bunun yerine, kare süresinin çarpanı olan en yakın süreye yuvarlanır.

@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()
}