Quando utilizar mock?

4 respostas
mateusbrum

Boa tarde pessoal!

Tenho algumas dúvidas um tanto quanto delicadas sobre a utilização dos mocks para testes unitários.

Vejamos:
1 - Caso eu tenho um objecto colaboradora e esse colaborador apesar de complexo é de simples acesso, devo criar um mock para o mesmo ?
2 - Caso não crie um mock e utilize o objecto real, é caracterizado teste de integração?
3 - Devo considerar todos os objectos colaboradores reais correctos (funcionalmente correctos), e não me preocupar com eles para testar minha unidade ?
4 - Há casos que tenho vários objectos colaboradores com várias dependências, como lido com essa situação caso seja necessário sempre utilizar mock para isolar a unidade ?
5 - Unidades que usam objectos reais não estão completamente isoladas ?

Resumindo, quando utilizar mocks e quando utilizar objectos reais, quais as vantagens e desvantagens?

Obrigado!

4 Respostas

Adolfo_Rodrigues

Na maioria dos casos, quando está testando unitariamente uma classe que possui dependências. O mock te ajuda a isolar o comportamento da unidade de trabalho que você está testando.

mateusbrum

Certamente. Mas isso me leva a alguns problemas relatado anteriormente, como quantidade de código codificado.
Não seria melhor utilizar o objecto real quando possível?

marcelo_mococa

Em minha opinião, você deve isolar totalmente as dependências.
Dependendo da arquitetura e granularidade de suas classes, você terá muitos mocks.
Se você tiver que criar poucos ou nenhum mock, analise seu código, talvez ele esteja pouco coeso e precise ser refatorado.

Se você utilizar uma referência para o objeto real, você estará fazendo um teste de integração e não mais de unidade.

att.
Marcelo

peczenyj
public class ClasseASerTestada {
   private ClasseASerMockada algoImportante;

   /* algum mecanismo de injeçao de 'algoImportante' */

   public xxx meuMetodo(parametros){
           ...
           algoImportante.fazAlgo(comAlgumParametro);
           ...
   }
}

Eu posso fazer um teste aonde eu crio um mock da ClasseASerMockada. Isso é util pois o meu método deve funcionar de acordo com o que eu espero da ClasseASerMockada.

Eu posso fazer um segundo teste aonde a ClasseASerMockada é a classe real, ai eu testo a integração das classes e o seu comportamento como um todo.

Ao meu ver são 2 situações distintas e complementares, um teste unitário e um teste de integração.

Criado 10 de setembro de 2008
Ultima resposta 11 de set. de 2008
Respostas 4
Participantes 4