Testes Unitários com Mock

A maioria das classes que implementamos tem dependências para outras classes. Na maioria das vezes, estas classes delegam parte de seu trabalho para suas dependências. Quando estamos testando uma classe, nossos testes irão automaticamente depender destes métodos.

Dessa maneira, estaremos testando não apenas a unidade mas um conjunto de classes. E isso não é desejável. A idéia de um teste de unidade é realmente testar a classe de maneira isolada, sem qualquer interferência das classes que a rodeiam. É aqui que entra o conceito de Mock. Mocks são

“Objetos pré-programados com expectativas que formam uma especificação das respostas que espera-se receber” (Martin Fowler)

Pense em um ambiente integrado, onde objetos de várias classes são utilizados para atingir uma responsabilidade no sistema. Caso um teste falhe, qual classe gerou um problema?

Em um sistema real, raramente existem classes isoladas e que não tem dependências. Já em um teste unitário isso deve ser feito para que possamos afirmar com segurança que uma classe específica cumpre o seu propósito no sistema. Um exemplo de mock é demonstrado na imagem abaixo.

Assim sendo, como podemos isolar as classes durante um teste de unidade? Como funcionam esses Mocks?

Um Mock, generalizando, é tudo aquilo que utilizamos como uma cópia de um elemento real, ou seja, é uma “falsificação” de algum objeto que se comporta exatamente como o objeto original do ponto de vista da unidade em teste. Todas as suas respostas são pré-definidas para que possamos simular um ambiente de uso ideal.

Digamos que queremos testar uma conexão com o banco de dados, porém nossos testes devem ser desacoplados, como faremos? Podemos imaginar que temos um banco de dados totalmente funcional e criar um objeto que represente ele, que finja ser o banco de dados, mas ele só vai possuir e responder aos métodos que chamamos e que utilizamos, e vamos poder responder da maneira que quisermos.

Desta forma podemos testar nossa lógica de negócios, assumindo que o banco de dados funciona perfeitamente e retornará um valor previsto por nós (que será o que nossa função testada estará esperando).

Last updated

Was this helpful?