• Waving Test

Diferenças entre Fakes, Stubs e Mocks


Qual a diferença entre mock e stub?

Enquanto um stub apenas provê respostas prontas para as chamadas que serão feitas durante o teste, o mock vai mais além e, além de prover as respostas, também valida as chamadas - ele conhece o comportamento esperado do sistema e testa este comportamento.


Assim, ao substituir um componente durante os testes, um stub teria a seguinte responsabilidade:

  • Se o teste invocar o método A, retorno B.

  • Se o teste invocar o método X, retorno Y.

Enquanto um mock teria a seguinte responsabilidade:

  • O teste deve invocar primeiro o método A, passando o valor 1 como parâmetro, daí retorno B.

  • O teste deve depois invocar o método X, passando o valor 2 como parâmetro, daí retorno Y.

  • Se o teste não seguir exatamente esta sequência, ele falha.

Então podemos colocar na lista de diferenças o fato de que um mock é mais complexo que um stub.


É comum desenvolvedores usarem frameworks de mocks (JMock, EasyMock, Mockito, ...) apenas como stubs (não validam a interação entre os testes e o componente "mockado"). Neste caso o framework é especializado em mocks, mas conceitualmente está sendo utilizado um stub e não um mock.


Também não é incomum desenvolvedores chamarem de "mock" todos os tipos de dublês. E não há nada de tão errado nisso desde que de coração você conheça as diferenças e a complexidade trazida por cada tipo.


Em quais situações usar um é mais vantajoso que usar o outro?


Estabelecido que ambos servem para substituir componentes reais (eles são "dublês" destes componentes) durante os testes, e entendida a diferença entre eles, fica nítido quando usar um e quando usar outro:

  • Use stub para testar se um código, dada uma determinada entrada (respostas prontas dos métodos do stub), produz determinada saída.

  • Use mockpara testar se um código se comporta da maneira esperada no que tange a interações com o componente que o mock está substituindo.

Um outro dublê na história:

Algumas vezes, além de prover respostas prontas, queremos saber se o teste de fato invocou um método do componente substiuído, ou mesmo quantas vezes ele invocou, mas não precisamos ser tão rígidos a ponto de verificar a sequência das chamadas ou o valor dos parâmetros, neste caso colocamos algum estado simples no stub (contador de chamadas do método, por exemplo) e obtemos assim um spy - um outro tipo de dublê que fica entre o stub e o mock, com alguns benefícios do segundo e quase toda a simplicidade do primeiro.


Usamos os diferentes tipos de dublês conforme a necessidade dos nossos testes, e damos preferência aos tipos menos complexos pois são menos acoplados ao código de produção, mais claros para serem entendidos, mais fáceis de receber manutenção.


O WavingTest é uma aplicação para automação de testes com Inteligência Artificial pensada para times ágeis usarem na sua rotina. Com ele, você tem:


  • Aumento da Cobertura dos Testes

Maior grau de recrutamento das funcionalidades com mais diversidade de cenários a serem submetidos os testes, gerando maior confiabilidade geral do processo


  • Mais Confiabilidade dos Testes

Utilização de automações e inteligência artificial, eliminando os riscos e as vulnerabilidades contidas na execução dos testes manuais


  • Aumento da Velocidade das Entregas

Automatizações que reduzem o tempo do time gasto com atividades manuais e operacionais sem agregação e aumentam o ritmo geral de entrega da solução proporcionando rápidos feedbacks



Inicie agora mesmo no WavingTest de forma 100% gratuita e eleve a produtividade do seu time!
3 visualizações0 comentário