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 (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
onView
do Espresso e os 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 no UiAutomator apenas pelos
descritores convenientes (texto mostrado, descrição do conteúdo etc.). Se você quiser
acessar um elemento combinável que use Modifier.testTag
, é necessário ativar
a propriedade semântica testTagsAsResourceId
para a subárvore do elemento
combinável específico. 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
.
Ative a propriedade semântica apenas uma vez na hierarquia dos elementos combináveis para
garantir que todos os elementos combináveis aninhados com Modifier.testTag
sejam acessíveis 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 combináveis com Modifier.testTag(tag)
podem ser acessados com
By.res(resourceName)
usando a mesma tag
do 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 inicial principal de testes do Android oferece uma visão mais ampla dos conceitos básicos e das técnicas de teste.
- Conceitos básicos de testes:saiba mais sobre os principais conceitos por trás dos testes de um app Android.
- Testes locais:é possível executar alguns testes localmente na sua estação de trabalho.
- Testes instrumentados:é uma boa prática executar testes instrumentados. 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ções, o conhecimento do Espresso ainda pode ser útil para alguns aspectos dos testes do Compose.