Ambiente controlado para testes - Parte 2: MockWebserver - Desenvolvimento de software sob medida
Fone: 8h - 17PM

Dextra

Ambiente controlado para testes – Parte 2: MockWebserver

Por: 04/12/2018

Confira nossa série sobre testes automatizados no Android:

Quando estamos testando aplicações que fazem requisições para serviços externos, devemos evitar fazer chamadas para serviços reais para evitar problemas como instabilidade nos serviços e de conectividade e mais importante, para podermos ter previsibilidade de quais serão as respostas e poder escrever nossos testes baseados nessas respostas.

Podemos simplesmente criar mocks e retornar os valores que precisamos, como vimos no artigo anterior. Essa seria a forma mais simples de resolver a questão. Porém, dessa forma você deixaria sem cobertura de teste toda a sua estrutura de requisições e dependendo da quantidade de chamadas para serviços, você teria que construir um número muito grande de mocks. Uma forma de fazer os testes mantendo o fluxo das suas requisições intacto é o uso de alguma ferramenta que te permita interceptar as requisições que são realizadas e retornar uma resposta pré definida.   

Uma ferramenta bastante poderosa e ainda assim super simples de utilizar criada pela Square, mesma criadora da Okhttp uma das ferramentas mais utilizadas para requisições em aplicativos Android e várias outras que você deve até já usar e não sabe que é dela, é a MockWebServer. Essa ferramenta permite que você intercepte as requisições feitas e faça as manipulações que sejam necessárias, como verificar se os headers corretos foram enviados e definir o código e o json que serão retornados como resposta daquela chamada.

Para tanto,  basta adicionar a dependência para a lib:

Feito isso, utilizar a lib é muito simples. Como você pode verificar no código abaixo, você precisa iniciar o mockServer no seu método @Before da sua classe de testes. Depois você tem duas formas de definir suas respostas. A mais simples é apenas chamar o método “enqueue” que basicamente coloca as respostas em uma fila e o mockServer apenas retorna aquelas respostas na ordem que foram adicionadas na fila conforme cada chamada, não importando para o mock server qual o path ou dados enviados na requisição, ele apenas retorna a resposta que estiver na fila.

Note o método “getJson” que apenas está buscando os arquivos json que adicionei em uma pasta chamada “json” dentro do package resources e retornando eles como String para serem adicionados na resposta “mockada” adicionada na fila.

Para casos mais simples esse formato já é suficiente. No entanto, em alguns casos você pode precisar de algo mais completo, como um servidor mock que retorna a resposta para um path específico ou até mesmo valida headers e parâmetros e retorna respostas específicas para cada caso. Nesse caso você pode definir um dispatcher que faz esses tratamentos das requests e te traz um servidor mock quase tão funcional quanto um servidor real.

E é isso! Usando essa ferramenta relativamente simples, você consegue ter liberdade para testar suas funcionalidades tendo a previsibilidade necessária sem modificar seu fluxo normal de funcionamento. Espero que seja útil nos seus próximos testes. No próximo artigo[Em breve], vamos falar um pouco sobre como testar funcionalidades que envolvem coisas externas a nossa aplicação.

Até a próxima!

Entre em Contato

Mensagem enviada com sucesso!

Tags

Comentários