Compose jest zintegrowany z popularnymi platformami testowymi.
Interoperacyjność z Espresso
W aplikacji hybrydowej komponenty Compose znajdziesz w hierarchiach widoków, a widoki w komponentach Compose (za pomocą komponentu AndroidView
).
Dopasowanie do żadnego z tych typów nie wymaga specjalnych czynności. Widoki dopasowujesz do onView
Espresso, a elementy Compose do 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()))
}
Współdziałanie z UiAutomator
Domyślnie elementy kompozycyjne są dostępne z UiAutomator tylko za pomocą wygodnych deskryptorów (wyświetlany tekst, opis treści itp.). Jeśli chcesz uzyskać dostęp do dowolnego komponentu, który używa Modifier.testTag
, musisz włączyć właściwość semantyczną testTagsAsResourceId
dla poddrzewa danego komponentu. Włączenie tego działania jest przydatne w przypadku komponentów kompozycyjnych, które nie mają innego unikalnego uchwytu, np. komponentów kompozycyjnych z możliwością przewijania (np. LazyColumn
).
Włącz właściwość semantyczną tylko raz na wysokim poziomie hierarchii funkcji kompozycyjnych, aby zapewnić dostępność wszystkich zagnieżdżonych funkcji kompozycyjnych z Modifier.testTag
z poziomu 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
}
}
Każdy element kompozycyjny z atrybutem Modifier.testTag(tag)
może być dostępny za pomocą atrybutu By.res(resourceName)
przy użyciu tego samego atrybutu tag
co atrybut resourceName
.
val device = UiDevice.getInstance(getInstrumentation())
val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.
Dodatkowe materiały
- Testowanie aplikacji na Androida: główna strona docelowa dotycząca testowania na Androidzie zawiera szersze omówienie podstaw i technik testowania.
- Podstawy testowania: dowiedz się więcej o podstawowych koncepcjach związanych z testowaniem aplikacji na Androida.
- Testy lokalne: niektóre testy możesz przeprowadzać lokalnie, na własnej stacji roboczej.
- Testy z użyciem instrumentacji: warto też przeprowadzać testy z użyciem instrumentacji. Są to testy, które są przeprowadzane bezpośrednio na urządzeniu.
- Ciągła integracja: Ciągła integracja umożliwia zintegrowanie testów z potokiem wdrażania.
- Testowanie różnych rozmiarów ekranu: użytkownicy mają do dyspozycji wiele urządzeń, dlatego warto testować różne rozmiary ekranu.
- Espresso: chociaż Espresso jest przeznaczony do interfejsów opartych na widokach, wiedza na jego temat może być przydatna w przypadku niektórych aspektów testowania Compose.