1
resposta

[Reclamação] O teste não parece estar correto

Ao descrever o cenário que o mockito deve mockar o professor utiliza o seguinte comando para o mockito:

Mockito.when (situacaoCadastralHttpService.buscarPorCnpj("123")).thenReturn(t null);

mas ao criar o método que cria a agencia, o caso que ele usa como exemplo coloca o cnpj como vazio:

return new Agencia(1, "", "", "",endereco)

Isso faz com que o trigger do mockito nunca seja executado. Para avaliar se o método estava realmente ativando o gatilho, eu alterei o thenReturn para thenThrow(IllegalStateException.class) e o teste continuava passando sem problema.

Alterei o código para que a agencia crada tenha o cnpj 123, e observei que, desta vez o IllegalState exception apareceu. só após isso retornei o comportamento do teste para o esperado.

Essa lógica está correta? podemos assumir que este primeiro teste proposto não testa na verdade o comportamento do código?

1 resposta

Olá, Breno. Como vai?

Sua percepção está absolutamente correta e sua investigação foi muito perspicaz! Esse é um erro clássico em testes unitários que pode levar ao que chamamos de falso positivo: o teste passa, mas não porque a lógica está correta, e sim porque o cenário não foi devidamente "atingido".

  • O Mockito utiliza a comparação de argumentos para decidir qual resposta deve retornar. Se você configurou o mock para reagir ao CNPJ "123" e o código envia uma String vazia "", o Mockito não encontra correspondência e retorna o valor padrão para objetos, que é null.
  • No seu caso, o teste passava porque o retorno já era null por padrão (pela falta de correspondência), e não porque o seu cenário de teste o definiu assim.
  • A estratégia que você usou de trocar o thenReturn por um thenThrow é uma excelente técnica de validação, pois garante que o teste falhe caso o código siga o caminho que você está tentando testar. *

Sua conclusão está correta: o teste original não estava testando o comportamento do código, pois o gatilho do mock nunca era disparado. Para tornar o teste mais flexível e evitar esse problema, você também poderia utilizar um matcher do Mockito:

Mockito.when(situacaoCadastralHttpService.buscarPorCnpj(anyString())).thenReturn(null);

Dessa forma, qualquer String enviada dispararia o comportamento, mas ajustar o valor exato para "123", como você fez, é a melhor forma de garantir que os dados estão fluindo corretamente entre as camadas.

Espero que possa ter lhe ajudado!