Compose 可与常见的测试框架集成。
与 Espresso 的互操作性
在混合应用中,您可以在视图层次结构中找到 Compose 组件, Compose 可组合项中的 View(通过
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)
的可组合项均可通过使用 使用与 resourceName
相同的 tag
的
By.res(resourceName)
。
val
device
=
UiDevice
.
getInstance
(
getInstrumentation
())
val
lazyColumn
:
UiObject2
=
device
.
findObject
(
By
.
res
(
" myLazyColumn
" ))
// Some interaction with the lazyColumn.