Interoperabilidade

O Compose se integra a frameworks de teste comuns.

Interoperabilidade com o Espresso

Em um app híbrido, é possível encontrar componentes do Compose dentro de hierarquias de visualização e visualizações dentro dos elementos combináveis do Compose (usando o elemento AndroidView).

Não há etapas específicas que sejam necessárias para fazer correspondência a nenhum dos tipos. Você faz a correspondência de visualizações com onView do Espresso e elementos do Compose com o 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()))
}

Interoperabilidade com o UiAutomator

Por padrão, os elementos combináveis podem ser acessados pelo UiAutomator apenas pelas próprias descritores convenientes (texto exibido, descrição do conteúdo etc.). Se você quiser para acessar qualquer elemento combinável que use Modifier.testTag, será necessário ativar a propriedade semântica testTagsAsResourceId do elemento combinável específico subárvore. Ativar esse comportamento é útil para elementos combináveis que não têm outro identificador exclusivo, como elementos combináveis roláveis (por exemplo, LazyColumn).

Ative a propriedade semântica apenas uma vez em um nível alto na hierarquia de elementos combináveis para garantir que todos os elementos combináveis aninhados com Modifier.testTag possam ser acessados de usando o UI Automator.

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
    }
}

Qualquer elemento combinável com o Modifier.testTag(tag) pode ser acessado com o uso de By.res(resourceName) usando a mesma tag que a resourceName.

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

Outros recursos

  • Testar apps no Android: os principais testes do Android. página de destino oferece uma visão mais ampla dos fundamentos e das técnicas de teste.
  • Conceitos básicos de testes:saiba mais os principais conceitos por trás dos testes de apps Android.
  • Testes locais:é possível executar alguns testes. localmente, na sua própria estação de trabalho.
  • Testes instrumentados:é bom praticar também a execução de testes instrumentados. Ou seja, testes que são executados diretamente no dispositivo.
  • Integração contínua: A integração contínua permite integrar os testes à implantação pipeline.
  • Teste diferentes tamanhos de tela:com alguns dispositivos disponíveis para os usuários, teste diferentes telas tamanhos.
  • Espresso: embora voltado para visualizações baseadas em visualização IUs, o conhecimento sobre o Espresso ainda pode ser útil para alguns aspectos do Compose. testes.