是否有任何工具或方法可以测试重组发生在一段代码中还是不发生在 Jetpack compose 中?
Are there any tools or way to test recomposition happens in a piece of code or not in Jetpack compose?
是否有任何工具或方法可以测试 Jetpack compose 中是否发生在一段代码中的重组?
有一个示例 here in the official Compose Testing docs 说明如何使用 composeTestRule.setContent
测试重组是否发生,并在其中使用测试可见的变量跟踪状态。
然后您更改测试的状态并断言跟踪变量等于预期状态。
@Test
fun counterTest() {
val myCounter = mutableStateOf(0) // State that can cause recompositions
var lastSeenValue = 0 // Used to track recompositions
composeTestRule.setContent {
Text(myCounter.value.toString())
lastSeenValue = myCounter.value
}
myCounter.value = 1 // The state changes, but there is no recomposition
// Fails because nothing triggered a recomposition
assertTrue(lastSeenValue == 1)
// Passes because the assertion triggers recomposition
composeTestRule.onNodeWithText("1").assertExists()
}
此示例用于在 Compose-Testing 中显示 edge-case,当您在测试中不使用 UI 同步方法时(例如 onNodeWithText().assertExists()
) ,但我认为它也可以用于解决您的问题。
是否有任何工具或方法可以测试 Jetpack compose 中是否发生在一段代码中的重组?
有一个示例 here in the official Compose Testing docs 说明如何使用 composeTestRule.setContent
测试重组是否发生,并在其中使用测试可见的变量跟踪状态。
然后您更改测试的状态并断言跟踪变量等于预期状态。
@Test
fun counterTest() {
val myCounter = mutableStateOf(0) // State that can cause recompositions
var lastSeenValue = 0 // Used to track recompositions
composeTestRule.setContent {
Text(myCounter.value.toString())
lastSeenValue = myCounter.value
}
myCounter.value = 1 // The state changes, but there is no recomposition
// Fails because nothing triggered a recomposition
assertTrue(lastSeenValue == 1)
// Passes because the assertion triggers recomposition
composeTestRule.onNodeWithText("1").assertExists()
}
此示例用于在 Compose-Testing 中显示 edge-case,当您在测试中不使用 UI 同步方法时(例如 onNodeWithText().assertExists()
) ,但我认为它也可以用于解决您的问题。