Jetpack Compose UI 测试按钮 onClick
Jetpack Compose UI Testing Button onClick
我正在尝试测试 buttonClick 如何更改 UI。
测试设置如下:
composeRule.setContent {
var i by remember { mutableStateOf(0) }
Button(modifier = Modifier.testTag("TEST"), onClick = { i++ }) {
Text(text = i.toString())
}
}
我的实际测试是这样的:
val button = composeRule.onNodeWithTag("TEST")
button.assertTextEquals("0")
button.performClick()
button.printToLog("Test")
button.assertTextEquals("1")
第一个断言通过了,但是在检查文本是否应该等于 1
:
时失败了
java.lang.AssertionError: Failed to assert the following: (Text + EditableText = [1])
Semantics of the node:
Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST'
Role = 'Button'
Text = '[0]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
Selector used: (TestTag = 'TEST')
点击后的printToLog()是这样的:
Printing with useUnmergedTree = 'false'
Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST'
Role = 'Button'
Text = '[0]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
因此看起来在执行点击时,内容没有重新组合,或者由于某种原因,点击实际上并没有发生。
有人知道这里发生了什么吗?
我解决了这个问题!
我的模拟器是 运行 API 级别 32。看起来 Compose Interaction Library 还不能完全使用 32。
代码在降级 API 级别后无需任何更改即可运行。
我正在尝试测试 buttonClick 如何更改 UI。
测试设置如下:
composeRule.setContent {
var i by remember { mutableStateOf(0) }
Button(modifier = Modifier.testTag("TEST"), onClick = { i++ }) {
Text(text = i.toString())
}
}
我的实际测试是这样的:
val button = composeRule.onNodeWithTag("TEST")
button.assertTextEquals("0")
button.performClick()
button.printToLog("Test")
button.assertTextEquals("1")
第一个断言通过了,但是在检查文本是否应该等于 1
:
java.lang.AssertionError: Failed to assert the following: (Text + EditableText = [1])
Semantics of the node:
Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST'
Role = 'Button'
Text = '[0]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
Selector used: (TestTag = 'TEST')
点击后的printToLog()是这样的:
Printing with useUnmergedTree = 'false'
Node #2 at (l=0.0, t=66.0, r=176.0, b=165.0)px, Tag: 'TEST'
Role = 'Button'
Text = '[0]'
Actions = [OnClick, GetTextLayoutResult]
MergeDescendants = 'true'
因此看起来在执行点击时,内容没有重新组合,或者由于某种原因,点击实际上并没有发生。
有人知道这里发生了什么吗?
我解决了这个问题!
我的模拟器是 运行 API 级别 32。看起来 Compose Interaction Library 还不能完全使用 32。
代码在降级 API 级别后无需任何更改即可运行。