🎭 3.14 Dublês de Teste: Mocks, Stubs, Spies e Fakes
Na literatura de engenharia de software (especialmente em xUnit Test Patterns de Gerard Meszaros), o termo genérico para objetos de simulação é Test Double (Dublê de Teste). No dia a dia, chamamos tudo de “Mock”, mas entender as nuances técnicas te torna um arquiteto melhor.
🏗️ A Taxonomia dos Dublês
| Tipo | Definição de Engenharia | Exemplo de Uso |
|---|---|---|
| Dummy | Objetos passados mas nunca usados (preencher parâmetros). | Um Usuario vazio em um construtor de Log. |
| Fake | Implementação real funcional, mas simplificada. | H2 In-Memory em vez de Oracle local. |
| Stub | Fornece respostas prontas (hardcoded) para chamadas no teste. | when(dao.list()).thenReturn(lista). |
| Mock | Focado em verificar interações e comportamento. | verify(email).envia(). |
| Spy | Wrapper sobre objeto real que registra interações. | Observar se um log foi gerado por uma classe de cálculo real. |
🛡️ Quando usar cada um?
- Use Stubs para fornecer dados ao código que você está testando (Injetar cenários).
- Use Mocks para garantir que comandos foram disparados (Efeitos colaterais).
- Use Fakes quando a lógica do dublê for complexa demais para um Mockito (ex: simulador de sistema de arquivos).
Terminologia Pragmática ⚙️
Embora os nomes variem, o framework Mockito é tão versátil que ele pode atuar como Mock, Stub, Spy e até prover suporte para Fakes. O foco não deve estar no nome, mas na Garantia de Comportamento. 🚀
Leitura Recomendada ⚡
Para aprofundar, pesquise pelo artigo clássico de Martin Fowler: “Mocks Aren’t Stubs”. Ele define a fundação do pensamento de isolamento que usamos hoje. 🏁