No terceiro artigo desta série, dei exemplos de como utilizar os dublês Stub e Sabotador. Neste artigo, vou demonstrar como usar o dublê Test Spy.
Como o próprio nome sugere, o Test Spy age durante a execução de um teste como um espião, capturando e armazenando as informações geradas pela unidade em teste para que sejam verificadas posteriormente. Assim, como um espião de verdade, o Test Spy não pode ser notado pela unidade em teste, ou seja, ele é totalmente passivo, não interage com nenhum outro objeto, apenas armazena o que lhe é passado. Para exemplificar o uso deste dublê, acompanhe o código abaixo:

Suponha que um serviço de e-mail de um sistema qualquer notifique um determinado usuário sempre que uma nota fiscal for cancelada na Secretaria da Fazenda. Este e-mail é gerado dinamicamente de acordo com as informações da nota fiscal. Para testar este comportamento de maneira eficiente, é preciso garantir que os dados enviados no e-mail estejam corretos. Neste caso, faz-se necessário o uso de um Test Spy para capturar estes dados.

Criando um Test Spy

Existem duas formas de se criar um Test Spy. A primeira delas é através de uma interface com os métodos comuns ao objeto real e ao dublê. A segunda forma é mais simples, bastando criar uma nova classe e estender a classe real fazendo “override” dos métodos envolvidos no teste. No entanto, caso opte pela segunda opção, tenha em mente que todos os demais métodos da classe real que não forem reescritos continuarão com o comportamento original. Leve este fato em conta quando for criar o dublê, pois, caso contrário, o resultado do teste pode ser totalmente diferente do esperado. Para este exemplo, dada a sua simplicidade, usaremos a segunda forma. Veja como fazer isto no código a seguir:

O código acima mostra como testar o envio do e-mail. Note que no lugar do serviço de e-mail real foi informado o mailServiceSpy criado anteriormente (linha 9). Este dublê irá armazenar os dados gerados dinamicamente durante a execução do teste deveNotificarOCancelamentoDaNotaFiscalViaEMail() (linha 15) para que seja possível verificar se a mensagem enviada está de acordo com o que é esperado (linhas 18 a 22).

Quer saber mais?

No próximo artigo desta série, veremos exemplos de Test Fake.

Até breve e bom código!

Autor

Ismael Soares é Gerente de Engenharia de Software na Bluesoft em São Paulo. É formado em banco de dados pela Faculdade Impacta de Tecnologia e possui mais de 14 anos com experiências em análise e desenvolvimento de sistemas. Já trabalhou com diversas tecnologias, entre elas: VB6, ASP, PHP, C#.NET, VB.NET, ASP.NET, PL/SQL, T-SQL, Groovy, Ruby e Java. Já participou de diversos projetos com banco de dados entre eles: Oracle, MSSQL Server, MySQL e Postgree.

Deixe aqui o seu comentário