segunda-feira, 5 de junho de 2017

Métodos visíveis apenas para classes de test no Apex - Salesforce

Uma coisa que pode ser muito complicada na execução de um trabalho que envolve codificação Apex no ambiente Salesforce é a necessidade de cobertura de teste (de pelo menos 75% do código). Dependendo do nível de complexidade da classe que se deseja testar, o trabalho de se gerar as condições para cobrir o todo o código, pode ser bem mais desgastante. É quase um consenso entre eu e meus amigos desenvolvedores Salesforce, que é rápido construir a classe, do que sua cobertura de teste! ;) Talvez esteja sendo dramático... mas é quase isso. 

Pensando nesse cenário, suponhamos que tenhamos que testar a classe abaixo (supondo que ela fosse uma classe com uma complexa lógica):


public class LogicaComplexa {
    
    public LogicaComplexa(){}
    
    public void metodoComplexo(){
        //lógica muito complexa e no meio dela você chama um método privado
        this.metodoPrivado();
    }
    
    private void metodoPrivado(){
        //código que precisa ser coberto
    }
}


Veja que no exemplo acima, temos um método privado e um público. Suponhamos que precise testar o método privado, sem ter que passar por toda lógica do método público, que possui uma lógica complexa. O que podemos fazer? Colocar o método público? Nada disso... Para ajudar nesse árduo trabalho que é cobrir 100% de todo o código, temos uma anotação para método Apex, que permite acessarmos um método (para realizar a cobertura de teste) mesmo ele sendo privado (private method). Essa anotação é o @TestVisible. Com ele, mesmo o método sendo privado, é possível acessá-lo por uma classe de teste Apex. Veja com fica esse método:


@TestVisible private void metodoPrivado(){
    //código que precisa ser coberto
}

Com essa annotation @TestVisible, é possível acessar um método privado em uma classe de teste: 


@isTest
private class LogicaComplexaTest {
    @isTest static void teste() {
        LogicaComplexa logica = new LogicaComplexa();
        logica.metodoPrivado();
    }
}


Bem, essa é a dica rápida de hoje.



* Está precisando de um suporte ou uma consultoria nos desenvolvimentos de classes teste Apex dentro da sua plataforma Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/


Nenhum comentário: