Jetpack Compose UI 测试按钮 onClick

Jur*_*iin 8 android ui-testing kotlin android-jetpack-compose

我正在尝试测试 ButtonClick 如何更改用户界面。

测试设置如下:

composeRule.setContent {
    var i by remember { mutableStateOf(0) }
    Button(modifier = Modifier.testTag("TEST"), onClick = { i++ }) {
        Text(text = i.toString())
    }
}
Run Code Online (Sandbox Code Playgroud)

我的实际测试如下:

val button = composeRule.onNodeWithTag("TEST")

button.assertTextEquals("0")
button.performClick()
button.printToLog("Test")
button.assertTextEquals("1")
Run Code Online (Sandbox Code Playgroud)

第一个断言通过,但是在检查文本是否应该等于时失败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')
Run Code Online (Sandbox Code Playgroud)

单击后的 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'
Run Code Online (Sandbox Code Playgroud)

因此,当执行单击时,内容可能不会重新组合,或者由于某种原因,单击实际上并未发生。

有谁知道这里会发生什么?

Jur*_*iin 7

我解决了这个问题!

我的模拟器运行的是 API 级别 32。看起来 Compose 交互库还不能完全与 32 兼容。

降级 API 级别后,代码无需任何更改即可运行。