Um stub devolve respostas prontas para que o código sob teste possa seguir. Um mock também registra interações, para que você possa afirmar que elas aconteceram, verificando comportamento em vez de estado. Um fake é uma implementação leve que funciona de verdade, como um repositório em memória. Use dependências reais quando a própria integração é o risco, e dublês de teste quando a dependência é lenta, cara ou difícil de forçar a um estado específico.
Por que os entrevistadores perguntam isso
Os termos são usados de forma intercambiável, então definições precisas sinalizam profundidade. Mais importante, o entrevistador quer o seu julgamento sobre quando um dublê é a escolha errada, já que mockar demais produz testes que passam felizes enquanto o sistema está quebrado. Citar dependências reais em containers para testes de integração mostra que você conhece a opção intermediária moderna em vez de tratar a questão como mockar tudo ou nada.
Como estruturar sua resposta
- Defina os três de forma clara, uma linha cada.
- Explique verificação de estado versus verificação de interação.
- Dê o caso em que uma dependência real é a escolha certa.
- Alerte sobre mockar demais e sobre testes que só testam os mocks.
- Mencione containers para dependências de integração realistas.
Exemplo de resposta
Um stub é passivo, ele só devolve o que você mandou devolver para o código seguir em frente. Um mock é um stub que também lembra o que aconteceu com ele, para você poder afirmar que o serviço de pagamento foi chamado exatamente uma vez com estes argumentos. Um fake é uma implementação real mas simplificada, como uma versão em memória de um repositório, que se comporta direito mas não é de nível de produção. A distinção que importa na prática é que stubs e fakes apoiam verificação de estado, afirmando sobre o resultado, enquanto mocks apoiam verificação de interação, afirmando sobre a conversa. Eu tendo para a primeira, porque afirmar sobre interações acopla o teste a detalhes de implementação, e aí um refactor quebra cem testes sem que um único comportamento tenha mudado. Onde eu uso dependências reais é em qualquer lugar em que a integração é o risco. Se a pergunta é se a nossa query realmente funciona contra o Postgres, um banco mockado não responde nada, então eu rodo a coisa real num container. Esse é o meu padrão para a camada de integração hoje, já que containers baratearam isso. Eu mocko serviços de terceiros que eu não controlo, e apoio isso com testes de contrato agendados contra o sandbox deles.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Qual é o sinal de que uma suíte de testes tem mocks demais?
- Como você testaria o tratamento de erro de um terceiro que você não consegue forçar a falhar?
- Quando um spy é a ferramenta certa em vez de um mock completo?
Mais perguntas para Engenheiro de QA
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas