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 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. As visualizações são combinadas com o onView do Espresso e os elementos do Compose são combinados 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 no UiAutomator apenas pelos descritores convenientes (texto exibido, descrição do conteúdo etc.). Se você quiser acessar qualquer elemento combinável que use Modifier.testTag, vai precisar ativar a propriedade semântica testTagsAsResourceId para a subárvore do elemento específico. A ativação desse comportamento é útil para elementos combináveis que não têm nenhum outro identificador exclusivo, como elementos roláveis, por exemplo, LazyColumn.

Ative a propriedade semântica apenas uma vez no topo da hierarquia de elementos combináveis para garantir que todos os elementos combináveis aninhados com Modifier.testTag possam ser acessados no 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
    }
}

Qualquer elemento combinável com Modifier.testTag(tag) pode ser acessado usando By.res(resourceName) usando a mesma tag que o 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: a página de destino principal de testes do Android oferece uma visão mais ampla dos fundamentos e das técnicas de teste.
  • Conceitos básicos de testes:saiba mais sobre os principais conceitos por trás do teste de um app Android.
  • Testes locais: é possível executar alguns testes localmente, na sua própria estação de trabalho.
  • Testes instrumentados:é uma prática recomendada também executar testes de instrumentação. Ou seja, testes executados diretamente no dispositivo.
  • Integração contínua: a integração contínua permite integrar seus testes ao pipeline de implantação.
  • Teste diferentes tamanhos de tela:com alguns dispositivos disponíveis para os usuários, teste diferentes tamanhos de tela.
  • Espresso: embora seja destinado a interfaces baseadas em visualização, o conhecimento do Espresso ainda pode ser útil para alguns aspectos dos testes do Compose.