Compose 与常见的测试框架集成。
与 Espresso 的互操作性
在混合应用中,您可以在视图层次结构中找到 Compose 组件,以及在 Compose 可组合项中找到视图(通过 AndroidView
可组合项)。
无需执行任何特殊步骤来匹配这两种类型。您可以使用 Espresso 的 onView
匹配视图,并使用 ComposeTestRule
匹配 Compose 元素。
@Test
fun androidViewInteropTest() {
// Check the initial state of a TextView that depends on a Compose state.
Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
// Click on the Compose button that changes the state.
composeTestRule.onNodeWithText("Click here").performClick()
// Check the new value.
Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}
与 UiAutomator 的互操作性
默认情况下,可组合项只能通过其便捷描述符(显示的文本、内容描述等)从 UiAutomator 访问。如果您想访问使用 Modifier.testTag
的任何可组合项,则需要为特定可组合项的子树启用语义属性 testTagsAsResourceId
。对于没有其他唯一句柄的可组合项(例如,可滚动可组合项(例如,LazyColumn
)),启用此行为很有用。
仅在可组合项层次结构中较高位置启用语义属性一次,以确保所有具有 Modifier.testTag
的嵌套可组合项都可以从 UiAutomator 访问。
Scaffold(
// Enables for all composables in the hierarchy.
modifier = Modifier.semantics {
testTagsAsResourceId = true
}
){
// Modifier.testTag is accessible from UiAutomator for composables nested here.
LazyColumn(
modifier = Modifier.testTag("myLazyColumn")
){
// Content
}
}
任何具有 Modifier.testTag(tag)
的可组合项都可以使用 By.res(resourceName)
访问,使用与 resourceName
相同的 tag
。
val device = UiDevice.getInstance(getInstrumentation())
val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.
其他资源
- 在 Android 上测试应用:主要的 Android 测试登录页面提供了对测试基础知识和技术的更广泛的视图。
- 测试基础知识: 了解有关测试 Android 应用的核心概念的更多信息。
- 本地测试: 您可以在自己的工作站上本地运行一些测试。
- 工具测试: 最好也运行工具测试。也就是说,直接在设备上运行的测试。
- 持续集成: 持续集成使您能够将测试集成到部署管道中。
- 测试不同的屏幕尺寸: 由于用户可以使用许多不同的设备,因此您应该针对不同的屏幕尺寸进行测试。
- Espresso:虽然适用于基于 View 的 UI,但 Espresso 知识仍然有助于 Compose 测试的某些方面。