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 combinável 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 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 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
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 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 de destino principal de testes do Android oferece uma visão mais ampla dos fundamentos e 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 de instrumentação:é uma boa prática executar também testes de instrumentação. Ou seja, testes executados diretamente no dispositivo.
- Integração contínua:permite integrar seus testes ao pipeline de implantação.
- Teste diferentes tamanhos de tela:com tantos dispositivos disponíveis para os usuários, é importante testar 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 do teste do Compose.