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, muitas vezes, não é gerenciável para apps executados em telas e dispositivos de vários tamanhos. Os problemas dos testes manuais geralmente ocorrem devido ao uso de um único dispositivo para desenvolvimento. Como resultado, os erros podem passar despercebidos em outros dispositivos com diferentes formatos.

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. Testes automatizados identificam problemas logo no início, reduzindo o risco de problemas que afetam a experiência do usuário.

O que testar

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

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

Atributos visuais

Independentemente de você personalizar as IUs para diferentes tamanhos de janela, verifique se elas 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, o app pode não renderizar alguns componentes no sistema de design como esperado quando as restrições de tamanho são estendidas.

Se o app tiver layouts adaptáveis para diferentes tamanhos de janela, realize 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 seus layouts e componentes ou crie testes de captura de tela para verificar visualmente os layouts.

Restauração de estado

Os 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 dobráveis introduzem novos recursos de exibição, 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 ocorrerem. Em seguida, você também precisa programar testes que confirmem se o app restaura o estado corretamente.

Figura 2. Dispositivo dobrável dobrado, aberto e 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 seu 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, algumas falhas acontecem 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 abaixo 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 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 mecanismos diferentes 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 normalmente alterna para a página de detalhes. Um teste automatizado precisa cobrir 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 vão de uma tela para outra ou entram no modo de várias janelas, você tem várias opções:

  • Em 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 uma lógica que detecta posições específicas em dispositivos dobráveis, já que mudanças de posição não acionam uma mudança 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 tablet pode ser controlado usando o Espresso Device para passar da dobra para a posição aberta no modo paisagem. Consulte a seção Espresso Device em Bibliotecas e ferramentas para testar diferentes tamanhos de tela para conferir exemplos.
Figura 3. Dispositivo dobrando e desdobrando.

Tipos de teste para diferentes tamanhos de tela e janela

Use o tipo adequado 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 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 instrumentados são executados em dispositivos ou emuladores, enquanto os testes de interface locais são executados no Robolectric (link em inglês) 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 a comparam 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 cobrir um grande número de elementos e as propriedades visuais deles. É possível executar testes de captura de tela na JVM ou nos dispositivos. Há vários frameworks de teste de captura de tela disponíveis.

Por fim, você pode precisar de testes de unidade para testar a funcionalidade das unidades de lógica que se comportam de maneira diferente dependendo do tipo de dispositivo ou 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.