Tecnologia

Ambiente controlado para testes — Parte 3: Testando run time permissions com Espresso

Por: , março 27, 2019

Confira nossa série sobre testes automatizados no Android:

_
A partir do Android 6.0, o usuário passou a ter a opção de revogar qualquer permissão de acesso para os apps instalados, por exemplo acesso ao salvamento em disco, acesso a câmera, etc. Para nós como desenvolvedores Android, surge mais uma preocupação, pois agora devemos sempre nos atentar a verificar se a autorização permanece concedida e também explicar para o usuário para qual finalidade será utilizada aquela permissão.
Fazer essa verificação é relativamente simples. O trecho de código abaixo mostra o uso do método checkSelfPermission que permite verificar se a permissão está concedida pelo usuário. Caso seja necessário solicitar a permissão ao usuário, podemos utilizar o método requestPermissions que faz todo o tratamento necessário e quando o usuário confirma ou cancela a permissão, o resultado chega na callback onRequestPermissionsResult onde você pode fazer os tratamentos necessários em cada um dos cenários.
https://gist.github.com/DiegoGSantos/11e12da743630bff48a30a3728f54274
Um outro desafio surge quando precisamos testar essa funcionalidade. Apesar de não parecer, o pequeno modal que surge solicitando a permissão é do sistema Android e portanto externo ao app e não é possível fazer nenhum tipo de interação com ele utilizando o Espresso.

Screen Shot 2019-03-01 at 00.12.00

Poderíamos utilizar alguma ferramenta que permitisse interagir com o mundo externo ao app, como por exemplo o UI Automator, mas nem sempre se faz necessária a adição de uma nova ferramenta, podendo-se resolver a questão apenas tomando certas providências enquanto desenvolve a funcionalidade. O segredo é isolar toda a lógica em um manager, que te permitirá fazer os ajustes necessários para testar. Abaixo podemos ver o manager:
https://gist.github.com/DiegoGSantos/cea887e02db0da73788dfd9cc64fef8a
E a activity utilizando esse manager:
https://gist.github.com/DiegoGSantos/76506ab582404805ab422b9634c66971
Utilizando essa estratégia, fica simples testar. Para garantir que a permissão estará sempre concedida no momento do teste, temos uma Rule que faz essa liberação. Feito isso, podemos “mocar” o nosso manager e dar as respostas esperadas para cada cenário que queremos testar.
https://gist.github.com/DiegoGSantos/897670682c2cd7351e5246ae75dd87b3
Bom, é isso por hoje! A dica é sempre que for desenvolver novas funcionalidades, antes de começar a de fato por a mão no código, pensar como serão feitos os testes, para que você não descubra apenas ao fim do desenvolvimento quando for testar, que será necessário um refactoring para mudar a estratégia de forma a facilitar a testabilidade, gerando grande retrabalho, portanto faça sempre essa análise. Até a próxima!  😉

  • Receba nosso conteúdo em primeira mão.