🛡️ 3.5 Garantindo Invocação de Métodos
Testar o estado final de um objeto (se ele foi encerrado ou não) é apenas metade da batalha. Precisamos garantir que os efeitos colaterais necessários ocorreram, como a persistência dos dados no banco.
🏗️ O Conceito de Verificação
Se estamos usando um Mock, não há um banco real para consultar com SELECT. Precisamos “perguntar” ao Mock se ele foi chamado com os parâmetros corretos.
📄 Exemplo de Verificação de Interação
@Test
void deveAtualizarLeiloesEncerrados() {
var hoje = LocalDate.now();
var antiga = hoje.minusDays(10);
var leilao1 = new CriadorDeLeilao().para("Console")
.naData(antiga).constroi();
var daoMock = mock(LeilaoDao.class);
when(daoMock.correntes()).thenReturn(List.of(leilao1));
var encerrador = new EncerradorDeLeilao(daoMock);
encerrador.encerra();
// ✅ VERIFICAÇÃO DE ELITE: O método foi chamado com este leilão exato?
verify(daoMock).atualiza(leilao1);
}
---
## 📊 Por que o `verify()` é inteligente?
O Mockito utiliza o `equals()` do objeto passado para garantir que a chamada foi feita exatamente com o dado esperado. Se o `encerra()` chamasse o `atualiza()` com um leilão diferente (ou não chamasse), o teste falharia instantaneamente.
> [!IMPORTANT] Teste do Efeito Colateral 🛡️
>
> Se você apagar a linha `dao.atualiza(leilao)` do seu código de produção, o teste acima falhará. Isso garante que a regra de persistência nunca seja removida acidentalmente durante uma refatoração. 🚀
---
## 📦 Dica de Clean Test
Sempre utilize o `verify()` para métodos `void` que representam passos críticos da regra de negócio (Atualizar DB, Enviar Email, Disparar Evento). 🏁