Compose интегрируется с распространенными фреймворками тестирования.
Совместимость с Espresso
В гибридном приложении вы можете найти компоненты Compose внутри иерархий представлений, а представления — внутри компонуемых объектов Compose (через компонуемый объект AndroidView
).
Никаких специальных действий для сопоставления любого из этих типов не требуется. Для сопоставления представлений используется onView
в Espresso, а для сопоставления элементов Compose — метод ComposeTestRule
.
@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)
используя тот же tag
, что и resourceName
.
val device = UiDevice.getInstance(getInstrumentation())
val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.
Дополнительные ресурсы
- Тестирование приложений на Android : основная целевая страница тестирования Android предоставляет более широкий обзор основ и методов тестирования.
- Основы тестирования : узнайте больше об основных концепциях тестирования приложений для Android.
- Локальные тесты : вы можете запустить некоторые тесты локально, на своей рабочей станции.
- Инструментированные тесты : рекомендуется также проводить инструментированные тесты, то есть тесты, которые выполняются непосредственно на устройстве.
- Непрерывная интеграция : Непрерывная интеграция позволяет интегрировать ваши тесты в конвейер развертывания.
- Тестируйте разные размеры экрана . Поскольку пользователям доступно множество устройств, вам следует тестировать экраны разных размеров.
- Espresso : хотя знание Espresso и предназначено для пользовательских интерфейсов на основе представлений, оно все равно может быть полезным для некоторых аспектов тестирования Compose.