Testar diferentes tamanhos de tela e janela

Os testes são uma parte importante do processo de desenvolvimento de apps. Geralmente, os apps são executados 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 geralmente não gerenciável para apps executados em telas e dispositivos de vários tamanhos. Na maioria das vezes, os problemas do teste manual 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 desde o início, reduzindo o risco de problemas que afetam a experiência do usuário.

O que testar

Ao desenvolver IUs 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 distintos.
  2. Como o estado é preservado nas mudanças de configuração.

Atributos visuais

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

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

Além disso, é possível que o app não renderize alguns componentes do sistema de design como esperado quando as restrições de tamanho forem esticadas.

Caso seu app tenha layouts adaptáveis para diferentes tamanhos de janela, faça 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 de estado

Apps executados em dispositivos como tablets são girados e redimensionados com muito mais frequência do que apps em smartphones. Além disso, os dispositivos dobráveis introduzem novos recursos de tela, como dobrar e desdobrar, que podem acionar mudanças de configuração. Seu app precisa ser capaz de restaurar o estado quando essas mudanças de configuração ocorrem. Também é necessário programar testes que confirmem que o app restaura o estado corretamente.

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

Primeiro, teste se o app não falha quando ocorrem mudanças na configuração. Verifique se cada interface no seu app pode processar qualquer combinação de rotação, redimensionamento ou dobra. Como as mudanças de configuração recriam a atividade por padrão, algumas falhas ocorrem devido a suposições de persistência da atividade.

Há várias maneiras de testar as 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 saber mais.
  • Em qualquer teste de interface, como Espresso ou Compose, simule uma mudança de configuração chamando Activity.recreate().

Geralmente, não é necessário usar dispositivos diferentes para testar a restauração de estado em resposta a mudanças de configuração. Isso ocorre 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 e listas em um dobrável aberto e dobra o dispositivo para alternar para a tela frontal, a interface geralmente alterna 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 acontecem em dispositivos que vão de uma tela para outra ou que 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 vai funcionar para a lógica que detecta posturas específicas em dispositivos dobráveis, já que as mudanças não acionam mudanças de configuração.
  • Usando um dispositivo ou emulador com suporte aos recursos que você quer testar, acione as mudanças de configuração relacionadas. Por exemplo, um dobrável ou um tablet pode ser controlado usando o Espresso Device para mudar de dobrado para plano aberto na paisagem. Consulte a seção Espresso Device de Bibliotecas e ferramentas para testar diferentes tamanhos de tela para conferir exemplos.
Figura 3. Dobrar e abrir o dispositivo.

Tipos de testes para diferentes tamanhos de tela e janela

Use o tipo apropriado de teste para cada caso de uso para verificar se o teste 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 executar 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 de interface podem ser instrumentados ou locais. Testes instrumentados são executados em dispositivos ou emuladores, enquanto testes de interface locais 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 clicar e deslizar. 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 interface.

  • Os testes de captura de tela fazem uma captura de tela de uma interface ou componente e comparam a imagem a 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 cobrir um grande número de elementos e as propriedades visuais deles. É possível executar testes de captura de tela na JVM ou em dispositivos. Há vários frameworks de teste de captura de tela disponíveis.

Por fim, podem ser necessários testes de unidade para testar a funcionalidade das 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.