Automatizar testes de interface

O teste das interações do usuário ajuda a garantir que os usuários não encontrem resultados inesperados ou tenham uma experiência ruim ao interagir com seu app. Crie o hábito de criar testes de interface do usuário (IU) se precisar verificar se a interface do seu app está funcionando corretamente.

Uma abordagem para o teste da IU é fazer com que um testador humano realize uma série de operações de usuário no app de destino e verifique se ele está se comportando corretamente. No entanto, essa abordagem manual pode ser demorada e propensa a erros. Uma abordagem mais eficiente é programar os testes de IU para que as ações do usuário sejam realizadas de maneira automatizada. A abordagem automatizada permite executar os testes de maneira rápida, confiável e repetitiva.

Os testes de interface iniciam um app (ou parte dele), simulam interações do usuário e verificam se o app reagiu corretamente. Eles são testes de integração que podem variar desde a verificação do comportamento de um pequeno componente até um teste de navegação grande que atravessa todo o fluxo de usuários. Eles são úteis para verificar regressões e verificar a compatibilidade com diferentes níveis de API e dispositivos físicos.

Executar testes de IU

  • Para executar testes de interface instrumentados usando o Android Studio, implemente o código de teste em uma pasta de teste do Android separada, src/androidTest/java. O Plug-in do Android para Gradle cria um app de teste com base no seu código e o carrega no mesmo dispositivo que o app de destino. No código de teste, use frameworks de testes de IU para simular interações do usuário no app de destino, a fim de realizar tarefas de teste que abranjam cenários de uso específicos.
  • Também é possível usar o Robolectric para executar testes de interface na JVM.

Configuração de arquitetura e teste

A arquitetura do app precisa permitir que os testes substituam partes dele para testar duplas, e você precisa usar bibliotecas que fornecem utilitários para ajudar no teste. Por exemplo, é possível substituir um módulo de repositório de dados por uma versão na memória que fornece dados determinísticos e falsos para o teste.

Diagramas de arquitetura de produção e teste. O diagrama de produção mostra fontes de dados locais e remotas fornecendo dados para o repositório, que, por sua vez, os fornece de forma assíncrona para a interface. O diagrama de teste mostra um repositório falso que fornece dados de forma síncrona para a interface.
Figura 3: teste de uma interface substituindo as dependências por falsos.

A abordagem recomendada para substituir dependências é a injeção de dependências. Você pode criar seu próprio sistema manualmente, mas recomendamos usar uma estrutura de DI como o Hilt para isso.

Por que testar interfaces automaticamente?

Um app Android pode ser direcionado a milhares de dispositivos diferentes em vários níveis de API e formatos. O alto nível de personalização que o SO oferece ao usuário significa que o app pode ser renderizado incorretamente ou até mesmo falhar em alguns dispositivos.

O teste de interface permite fazer testes de compatibilidade, verificando o comportamento de um app em diferentes contextos. Talvez você queira executar os testes de interface em dispositivos que variam das seguintes maneiras:

  • Nível da API: 21, 25 e 30.
  • Localidade: inglês, árabe e chinês.
  • Orientação: retrato, paisagem.

Além disso, os apps precisam verificar o comportamento além dos smartphones. Faça testes em tablets, dispositivos dobráveis e outros dispositivos. Leia mais sobre como testar diferentes tamanhos de tela.

Tipos de testes de interface

Esta seção aborda dois tipos de testes de IU:

  • Os testes de comportamento analisam a hierarquia da interface para fazer declarações sobre as propriedades dos elementos da interface.
  • Os testes de captura de tela fazem capturas de tela de uma interface e as comparam com imagens aprovadas anteriormente.