Testar diferentes tamanhos de tela e janela

Os testes são uma parte importante do processo de desenvolvimento de apps. Normalmente, você executa apps em um emulador ou dispositivo para verificar manualmente se o código funciona conforme o esperado. No entanto, o teste manual é demorado, suscetível a erros e, muitas vezes, incontrolável para apps executados em telas e dispositivos de vários tamanhos. Os problemas de testes manuais geralmente são resultado do uso de um único dispositivo para desenvolvimento. Como resultado, os erros podem passar despercebidos em outros dispositivos com formatos diferentes.

Para identificar regressões em diferentes tamanhos de janela e tela, implemente testes automatizados para verificar se o comportamento e a aparência do app são consistentes em diferentes formatos. Os testes automatizados identificam problemas antecipadamente, reduzindo o risco de problemas que afetam a experiência do usuário.

O que testar

Ao desenvolver interfaces para diferentes tamanhos de tela e janela, preste atenção especial a dois aspectos:

  1. Como os atributos visuais dos componentes e layouts são diferentes em janelas de tamanhos diferentes
  2. Como o estado é preservado em mudanças de configuração

Atributos visuais

Independentemente de personalizar as interfaces para tamanhos de janela diferentes ou não, verifique se elas são exibidas corretamente. Considere larguras e alturas compactas, médias e estendidas. Consulte Classes de tamanho de janela para conferir os pontos de interrupção recomendados.

Figura 1. A tela "Para você" no Now In Android em diferentes tamanhos de janela

Além disso, o app pode não renderizar alguns componentes no sistema de design conforme esperado quando as restrições de tamanho são esticadas.

Se o app tiver layouts adaptáveis para tamanhos de janela diferentes, você precisará de testes automatizados para evitar regressões. Por exemplo, corrigir uma margem em um smartphone pode levar a inconsistências de layout em um tablet. Crie testes de interface para verificar o comportamento dos layouts e componentes ou crie testes de captura de tela para verificar os layouts visualmente.

Restauração do estado

Os apps executados em dispositivos como tablets são girados e redimensionados com muito mais frequência do que os apps em smartphones. Além disso, os dispositivos dobráveis apresentam novos recursos de exibição, como dobrar e desdobrar, que podem acionar mudanças de configuração. O app precisa restaurar o estado quando essas mudanças de configuração ocorrem. Você também precisa escrever testes que confirmem que o app restaura o estado corretamente.

Figura 2. Dispositivo dobrável dobrado, totalmente aberto, totalmente aberto girado para o modo paisagem e meio aberto (mesa).

Primeiro, teste se o app não falha quando ocorrem mudanças de configuração. Confira se todas as interfaces do app podem processar qualquer combinação de rotação, redimensionamento ou dobra. Como as mudanças de configuração recriam a atividade por padrão, alguns bloqueios ocorrem devido a suposições de persistência de atividades.

Há várias maneiras de testar mudanças de configuração, mas, na maioria dos casos, há duas maneiras de testar:

  • No Compose, use StateRestorationTester para simular uma mudança de configuração de maneira eficiente sem reiniciar a atividade. Consulte as seções a seguir para mais informações.
  • Em qualquer teste de interface, como o Espresso ou o Compose, simule uma mudança de configuração chamando Activity.recreate().

Geralmente, não é necessário usar dispositivos diferentes para testar a restauração do estado em resposta a mudanças de configuração. Isso acontece porque todas as mudanças de configuração que recriam a atividade têm repercussões semelhantes. No entanto, algumas mudanças de configuração podem acionar diferentes mecanismos de restauração de estado em dispositivos específicos.

Por exemplo, quando um usuário está visualizando uma interface de detalhes da lista em um dispositivo dobrável aberto e ele dobra o dispositivo para mudar para a tela frontal, a interface normalmente muda para a página de detalhes. Um teste automatizado precisa abranger essa restauração do estado da interface, incluindo o estado de navegação.

Para testar as mudanças de configuração que ocorrem em dispositivos que passam de uma tela para outra ou entram no modo de várias janelas, você tem várias opções:

  • Usando qualquer dispositivo, redimensione a tela durante um teste. Na maioria dos casos, isso aciona todos os mecanismos de restauração de estado que você precisa verificar. No entanto, esse teste não funciona para a lógica que detecta posturas específicas em dispositivos dobráveis, porque as mudanças de postura não acionam uma mudança de configuração.
  • Usando um dispositivo ou emulador compatível com os recursos que você quer testar, ative as mudanças de configuração relacionadas. Por exemplo, um dispositivo dobrável ou um tablet podem ser controlados usando o Espresso Device para passar de dobrado para aberto na orientação paisagem. Consulte a seção Dispositivo Espresso em Bibliotecas e ferramentas para testar diferentes tamanhos de tela para ver exemplos.
Figura 3. Dispositivo se dobrando e desdobrando.

Tipos de testes para diferentes tamanhos de tela e janela

Use o tipo de teste adequado para cada caso de uso e verifique se ele está funcionando corretamente em diferentes formatos:

  • Os testes de comportamento da interface iniciam uma parte da interface do app, como a exibição de uma atividade. Os testes verificam se determinados elementos existem ou têm atributos específicos . Opcionalmente, os testes podem realizar ações simuladas do usuário. Para visualizações, use o Espresso. O Jetpack Compose tem as próprias APIs de teste. Os testes de comportamento da interface podem ser instrumentados ou locais. Os testes de instrumentação são executados em dispositivos ou emuladores, enquanto os testes de interface local são executados no Robolectric na JVM.

    Use testes de comportamento da interface para verificar se a implementação de navegação de um app está correta. Os testes realizam ações como cliques e deslizamentos. Os testes de comportamento da interface também verificam a existência de determinados elementos ou propriedades. Para mais informações, consulte Automatizar testes de IU.

  • Os testes de captura de tela fazem uma captura de tela de uma interface ou componente e comparam a imagem com uma captura de tela aprovada anteriormente. Essa é uma maneira muito eficaz de se proteger contra regressões, já que uma única captura de tela pode abranger um grande número de elementos e suas propriedades visuais. É possível executar testes de captura de tela na JVM ou em dispositivos. Há vários frameworks de teste de capturas de tela disponíveis. Para mais informações, consulte Testes de captura de tela.

Por fim, talvez você precise de testes de unidade para testar a funcionalidade de unidades de lógica que se comportam de maneira diferente dependendo do tipo de dispositivo ou do tamanho da janela, mas os testes de unidade são menos comuns nessa área.

Próximas etapas

Para mais informações sobre como implementar as verificações contidas neste documento, consulte Bibliotecas e ferramentas.