Narzędzie Compose integruje się z popularnymi platformami testowania.
Interoperacyjność z Espresso
W aplikacji hybrydowej komponenty Utwórz w hierarchii widoków
widoków w funkcjach kompozycyjnych AndroidView
.
Aby dopasować oba typy, nie musisz wykonywać żadnych specjalnych kroków. Dopasowujesz liczbę wyświetleń za pomocą:
Elementy onView
Espresso oraz Utwórz wiadomość za pomocą przycisku 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()))
}
Interoperacyjność z UiAutomator
Domyślnie funkcje kompozycyjne są dostępne w UiAutomator tylko przez:
wygodnych deskryptorów (wyświetlany tekst, opis treści itp.). Jeśli chcesz
aby uzyskać dostęp do funkcji kompozycyjnej, która używa funkcji Modifier.testTag
, musisz włączyć
właściwość semantyczną testTagsAsResourceId
dla konkretnego elementu kompozycyjnego
poddrzewa. Włączenie tego zachowania jest przydatne w przypadku elementów kompozycyjnych, które nie zawierają żadnych
inny unikalny uchwyt, taki jak przewijane elementy kompozycyjne (np. LazyColumn
).
Włącz właściwość semantyczną tylko raz na najwyższym poziomie w hierarchii elementów kompozycyjnych, aby
upewnij się, że wszystkie zagnieżdżone funkcje kompozycyjne korzystające z funkcji Modifier.testTag
są dostępne z
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
}
}
Wszystkie funkcje kompozycyjne korzystające z funkcji Modifier.testTag(tag)
mogą być dostępne przy użyciu interfejsu API
z By.res(resourceName)
przy użyciu tego samego tag
co 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 Androidzie: główne testy na Androidzie. daje szersze spojrzenie na podstawy i techniki testowania.
- Podstawy testowania: więcej informacji o podstawowych koncepcjach testowania aplikacji na Androida.
- Testy lokalne: możesz przeprowadzić testy. lokalnie, na własnej stacji roboczej.
- Testy instrumentowane: są dobre. w ramach testów instrumentalnych. Oznacza to, że testy przeprowadzane bezpośrednio na urządzeniu.
- Tryb ciągłej integracji: Tryb ciągłej integracji umożliwia integrowanie testów we wdrożeniu potoku.
- Testowanie różnych rozmiarów ekranu: za pomocą dostępnych dla użytkowników jest bardzo wiele urządzeń, należy przetestować różne urządzenia rozmiarów reklam Google Ads.
- Espresso: chociaż jest przeznaczony do obsługi widoków Interfejsy użytkownika i język espresso mogą też być przydatne w niektórych aspektach funkcji Compose i testowania.