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

Confira nossa série sobre testes automatizados no Android: Por que devo testar minhas aplicações Testes automatizados no Android Ambiente...

Data de publicação: 27/03/2019
Post Dextra Tecnologia

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.

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:

E a activity utilizando esse manager:

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.

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!  😉

Posts relacionados

  1. Sobre a Dextra

    Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes.

  2. Categorias

Scroll to top