Em casos como esse, seria ideal fazermos um código "fake" apenas para nossa classe de testes unitários e o código real para nossa aplicação. Para essas situações, usamos o método estático isRunningTest, da classe Test. Ele retorna true, se estiver sendo executado apartir de uma classe de testes e false, se for apartir de uma aplicação normal. Com o isRunningTest, portanto, é possível verificar, em meio à nossa lógica de negócio, se vamos usar um código real ou apenas para testes.
Um exemplo clássico é quando precisamos acessar o PriceBook padrão (StandardPriceBook). Como não conseguimos criá-lo em uma classe de testes, para ser usado na classe de regra de negócio, usaremos uma combinação do isRunningTest com getStandardPricebookId, da classe Test (que já conhecemos melhor através do post Criando registros do catálogo de preço (PriceBookEntry) padrão em classes de teste Apex). Veja a seguir como ficou meu método em uma classe de regra de negócio:
id idPriceBook = null;
if (Test.isRunningTest())
idPriceBook = Test.getStandardPricebookId();
else {
PriceBook pb = [SELECT id FROM PriceBook2 WHERE IsActive = true AND IsStandard = true];
idPriceBook = pb.id;
}
Perceba que quando esse código for chamado por uma classe de testes, irá executar o IF, porém, se for chamado por uma execução comum, irá executar o ELSE. E dessa forma conseguirei cobrir completamente a minha classe de negócio.
E esse mesmo código, de forma mais resumida:
id idPriceBook = Test.isRunningTest() ? Test.getStandardPricebookId() : [SELECT id FROM PriceBook2 WHERE IsActive = true AND IsStandard = true][0].id;
Por hoje é só!