Skip to content
Latchkey

O que é um Mock?

Um mock é um objeto falso que substitui uma dependência real em um teste e verifica como o seu código interage com ela.

Quando o código sob teste depende de algo lento, externo ou difícil de controlar, como um gateway de pagamento ou um serviço de e-mail, você o substitui por um mock. Um mock não apenas retorna respostas predefinidas, mas também registra e faz asserções sobre como foi chamado, permitindo que você verifique o comportamento sem tocar no sistema real.

O que um mock faz

Um mock substitui um colaborador real por um substituto programável. Você configura o que ele retorna e, em seguida, faz asserções de que o seu código o chamou da maneira correta, com os argumentos corretos e o número correto de vezes. A verificação da interação é o que distingue um mock de um stub simples.

Um exemplo prático

Ao testar um notificador, você faz mock do cliente de e-mail e assere que send foi chamado uma vez com o destinatário esperado, sem nunca enviar e-mail de verdade.

A mock verifying an interaction
const email = { send: jest.fn() };
notifyUser(email, "ada@example.com");
expect(email.send).toHaveBeenCalledWith("ada@example.com");

Mocks entre os test doubles

  • Stub: retorna valores predefinidos, sem verificação de interação.
  • Mock: retorna valores e verifica como foi chamado.
  • Spy: envolve um objeto real e registra as chamadas feitas a ele.
  • Fake: uma implementação funcional, porém simplificada.

Quando os mocks ajudam e quando prejudicam

Os mocks tornam os testes unitários rápidos e determinísticos ao remover dependências externas. O excesso de mocks, porém, pode produzir testes que passam enquanto a integração real está quebrada, porque eles fazem asserções contra as suas suposições em vez da realidade. Equilibre testes unitários com muitos mocks com alguns testes de integração reais.

Mocks e confiabilidade do CI

Como os mocks removem rede e I/O, testes unitários bem mockados são rápidos e raramente instáveis no CI. A instabilidade tende a residir nas camadas de integração e E2E não mockadas, onde falhas transitórias são comuns. O Latchkey refaz automaticamente essas falhas transitórias para que um percalço de dependência real não faça falhar um build que de outra forma estaria verde.

Principais conclusões

  • Um mock substitui uma dependência real e verifica como ela foi chamada.
  • A verificação da interação é o que distingue os mocks dos stubs.
  • O excesso de mocks corre o risco de testes verdes sobre uma integração real quebrada.

Guias relacionados