Interoperacyjność

Compose integruje się 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 obu typów nie wymaga żadnych specjalnych działań. 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 elementy kompozytowe są dostępne w UiAutomator tylko pod nazwą (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 poddrzewi danego komponentu. 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: niektóre testy możesz przeprowadzać lokalnie na swoim komputerze.
  • Testy z instrumentacją: warto też przeprowadzać testy z instrumentacją. Chodzi o testy, które są wykonywane bezpośrednio na urządzeniu.
  • Tryb ciągłej integracji: tryb ciągłej integracji umożliwia zintegrowanie testów z potokiem wdrożeniowym.
  • Testowanie różnych rozmiarów ekranu: ze względu na dużą liczbę urządzeń dostępnych dla użytkowników, należy przeprowadzić testy na różnych rozmiarach ekranu.
  • Espresso: chociaż jest ono przeznaczone do interfejsów użytkownika opartych na widokach, znajomość Espresso może być przydatna w niektórych aspektach testowania w Compose.