Se você é um desenvolvedor, eu posso afirmar com 100% de certeza que você já ouviu falar em Testes Unitários, não é mesmo?

E se você já escreveu uma classe de teste para o Salesforce, você provavelmente faz como a maioria dos desenvolvedores, utiliza o famoso Test.isRunningTest().

Se você utiliza deste artificio, a minha dica é, pare imediatamente, a menos que seja algo que seja impossível de ser testado, como o envio de email por exemplo, mas eu tenho visto muitos códigos de desenvolvedores, que ao realizar uma chamada HTTP acabam por colocar um um hack usando o Test.isRunningTest() para não fazer a chamada HTTP, e isso muitas vezes impossibilita você de consegui uma cobertura de código acima de 75%, exigida pelo Salesforce para implantação em Produção, e ainda impossibilitando você de testar efetivamente o retorno da Chamada HTTP, mas afinal, como simular então uma chamada HTTP em um Test Unitário?

A resposta é bem simples, basta implementar o HttpCalloutMock, no exemplo que vou dar a seguir, vamos implementar essa interface e também criar alguns artifícios para que você possa reutilizar esta classe em TODAS as suas chamadas HTTP, simulando por exemplo chamadas com erro 500, 404 e qualquer outro cenário que você necessite, tudo isso implementando apenas uma vez o HttpCalloutMock, e reutilizando isso em todos os seus testes.

Bom, mas chega de papo né, e vamos ao que interessa, abaixo uma implementação limpa da interface HttpCalloutMock, ela exige apenas que você implementa o método respond

Bom, mas é obvio que somente isso não vai resolver o seus problemas, então vamos efetivamente colocar alguns códigos que vão fazer o respond funcionar como deveria, e deixar a classe mais dinâmica!

Primeiro, vamos adicionar algumas propriedades que serão utilizadas dentro do método respond.

E em seguidas, alguns métodos para que possamos popular essas propriedades.

E por fim, implementar o método respond, para retornar o que foi definido anteriormente, assim a nossa classe completa ficará assim:

Ok, uma vez que você já tem esse código implementado e salvo na sua ORG, agora podemos começar a fazer uso dela, mas antes, mais uma dica rápida, se você ainda é daqueles que usa o Eclipse para programar para o Salesforce, sugiro ver o meu post de como eliminar o Eclipse da sua vida de uma vez por todas.

E porque eu prefiro o IntelliJ ao invés do Eclipse? isso é muito simples, basta utilizá-lo por algum tempo e você terá uma nova perspectiva de programação, uma tecla de atalho que utilizo muito, é o auto-completar, Control + Espaço, essa tecla de atalho te listará todos os métodos disponíveis para você utilizar naquele contexto, e isso será útil para você aprender a utilizar essa sua nova classe.

Bom então vamos ao que interessa, vamos criar uma classe que irá pegar uma URL é gerar um Shortlink com ela utilizando a API do Google, essa classe inclusive pode ser útil para você em seus projetos.

E por fim, a nossa classe de teste, para conseguirmos 100% de cobertura, foram realizados 3 testes, um com o cenário FELIZ onde o retorno deve ser a URL curta, e outros 2 para simular os possíveis cenários INFELIZES, o primeiro é um erro de chamada HTTP que retorne um statusCode diferente de 200 e o último com statusCode 200, porém com o Status do JSON de retorno do Google diferente de OK, veja abaixo como ficou a nossa classe de teste.

Espero que este post seja muito útil para você, e que você se liberte de uma vez por todas do Test.isRunningTest() nas suas chamadas HTTP, não deixe de compartilhar com seus amigos este post, caso tenha ficado com alguma dúvida, deixe o seu comentários abaixo e farei o possível para tentar esclarecer todas elas.

Um forte abraço, e até o próximo post :)

 

Fernando Sousa

Fernando Sousa

Salesforce Solution Architect at Resource It Solution

Formado em Bacharelado em Sistemas da Informação pela Universidade de Taubaté (UNITAU) e MBA em Projeto de Aplicações para Dispositivos Móveis pelo IGTI – Instituto de Gestão em Tecnologia da Informação.

Comecei a programar bem cedo, por volta de 10 anos de idade, de maneira auto-didata passei por várias linguagens.

Em 2015 conheci a Salesforce, fazendo integração entre Salesforce e um Aplicativos Mobile,

Atualmente possuo as certificações Salesforce Salesforce Certified Platform Developer I e Salesforce Certified Platform App Builder

Com mais de 100 emblemas e 50.000 pontos no trailhead, conquistei o título de Ranger.

Acompanhe meu Trailhead aqui.

Pin It on Pinterest

Shares