Skip to content

UI 测试 (Testing)

源:测试 Compose 布局

Compose 测试使用 Semantics 树来查找元素并与其交互,这使得测试不依赖于具体的实现细节。

1. 依赖配置

kotlin
// UI 测试
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
// 调试工具 (Layout Inspector 需要)
debugImplementation("androidx.compose.ui:ui-test-manifest")

2. 编写测试

Rule

使用 createComposeRule 启动测试环境。

kotlin
class MyComposeTest {
    @get:Rule
    val composeTestRule = createComposeRule()

    @Test
    fun myTest() {
        // 1. 设置内容
        composeTestRule.setContent {
            MyAppTheme {
                MainScreen()
            }
        }

        // 2. 查找节点并断言
        composeTestRule.onNodeWithText("欢迎")
            .assertIsDisplayed()

        // 3. 执行操作
        composeTestRule.onNodeWithText("点击我")
            .performClick()

        // 4. 验证结果
        composeTestRule.onNodeWithText("已点击")
            .assertIsDisplayed()
    }
}

3. 常用查找器 (Finders)

API描述
onNodeWithText("text")查找显示特定文本的节点
onNodeWithContentDescription("desc")查找具有特定无障碍描述的节点
onNodeWithTag("tag")查找带有 Modifier.testTag("tag") 的节点
onAllNodesWith...查找多个节点

4. 常用断言 (Assertions)

API描述
assertIsDisplayed()验证可见
assertDoesNotExist()验证不存在
assertIsEnabled()验证已启用
assertTextEquals("text")验证文本内容

5. 独立于 Activity 测试

如果只想测试一个简单的 Composable 函数,不需要启动真正的 Activity,createComposeRule 足矣。如果需要访问 Activity 资源(如 getString),则使用 createAndroidComposeRule<MainActivity>()