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ń. Wyświetlania są dopasowywane do widoków w Espresso (onView), a elementy do komponowania – do widoków w komponowaniu (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 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 poddrzewa danego komponentu. Włączenie tego zachowania jest przydatne w przypadku komponentów, które nie mają żadnego innego unikalnego identyfikatora, takich jak przewijalne komponenty (np. LazyColumn).

Włącz właściwość semantyczną tylko raz w hierarchii komponentów, aby mieć pewność, że wszystkie zagnieżdżone komponenty z Modifier.testTag są dostępne w 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
    }
}

Dostęp do dowolnego komponentu z Modifier.testTag(tag) można uzyskać za pomocą By.res(resourceName), używając 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 Androida: główna strona z informacjami o testowaniu aplikacji na Androida zawiera więcej informacji o podstawach i technikach testowania.
  • Podstawy testowania: dowiedz się więcej o podstawowych koncepcjach testowania aplikacji na Androida.
  • Testy lokalne: niektóre testy możesz przeprowadzać lokalnie na swoim komputerze.
  • Testy z użyciem instrumentacji: warto też przeprowadzać testy z użyciem instrumentacji. 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 przetestować różne rozmiary ekranu.
  • Espresso: chociaż jest ono przeznaczone do interfejsów użytkownika opartych na widokach, wiedza o Espresso może być przydatna w niektórych aspektach testowania Compose.