Interoperabilidade

O Compose é integrado 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 do Compose (com o elemento AndroidView).

Não há etapas específicas que sejam necessárias para fazer correspondência a nenhum dos tipos. A correspondência de visualizações é feita usando o método Espresso's onView e os elementos do Compose com 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 mostrado, descrição do conteúdo etc.). Caso queira acessar um elemento combinável que use Modifier.testTag, é necessário ativar a propriedade semântica testTagsAsResourceId para a subárvore de elementos combináveis específicos. Ativar esse comportamento é útil para elementos combináveis que não têm nenhum outro elemento exclusivo, por exemplo, elementos roláveis como a LazyColumn.

do Jetpack Compose.

Ative a propriedade semântica apenas uma vez na hierarquia dos elementos de composição para garantir que todos os elementos de composição aninhados com Modifier.testTag possam ser acessados pelo 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
    }
}

Todos os elementos de composição com o Modifier.testTag(tag) podem ser acessados com o uso de By.res(resourceName) usando o mesmo 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 conceitos básicos e técnicas de teste.
  • Conceitos básicos de testes: Saiba mais sobre os conceitos básicos por trás dos testes de um app Android.
  • Testes locais: é possível executar alguns testes localmente, na sua estação de trabalho.
  • Testes de instrumentação: também é recomendável 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.
  • Testar diferentes tamanhos de tela: Com tantos dispositivos disponíveis para os usuários, é recomendável testar 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.