Oi, Miguel!
Entendo sua dúvida sobre como os validadores que você adicionou no teste estão sendo chamados pelo método solicitar()
. Vamos esclarecer isso com mais detalhes.
Quando você usa a anotação @Spy
no Mockito, você está criando um objeto real que mantém os comportamentos originais, mas que também pode ser monitorado pelo Mockito. No seu caso, você está criando uma lista validacoes
que é um Spy
e adicionando dois validadores mocks (validador1
e validador2
) a essa lista.
Aqui está o passo a passo do que está acontecendo:
Criação da Lista Spy:
@Spy
private List<ValidacaoSolicitacaoAdocao> validacoes = new ArrayList<>();
Isso cria uma lista real (ArrayList
) que o Mockito pode monitorar.
Adição dos Validadores Mocks:
validacoes.add(validador1);
validacoes.add(validador2);
Você adiciona os validadores mocks à lista validacoes
.
Chamada do Método solicitar
:
Quando você chama service.solicitar(dto)
, dentro desse método, há uma lógica que percorre a lista de validadores e chama o método validar(dto)
para cada um deles:
for (ValidacaoSolicitacaoAdocao validador : validacoes) {
validador.validar(dto);
}
Verificação com Mockito:
Como você adicionou os validadores mocks à lista validacoes
, o Mockito pode verificar se os métodos validar
foram chamados:
BDDMockito.then(validador1).should().validar(dto);
BDDMockito.then(validador2).should().validar(dto);
O código entende que os validadores foram chamados porque, no momento em que você adiciona os mocks à lista validacoes
, o método solicitar
está percorrendo essa lista e chamando o método validar
para cada validador presente nela. Como os validadores são mocks, o Mockito pode rastrear essas chamadas e verificar se elas ocorreram.
Espero ter ajudado e bons estudos!