Considere o seguinte trecho de código em Java, utilizando JU...
Ao se executar o código em condições ideais, o teste
Comentários
Veja os comentários dos nossos alunos
Introdução a Testes com JUnit e Mockito
O teste apresentado utiliza JUnit e Mockito para validar o comportamento de uma classe de serviço. O código mostra um teste que configura um mock do repositório para retornar um pedido quando o método buscarPorId é chamado, e também configura o mock do pedido para retornar false no método isValido(). O teste então chama o método processarPedido e verifica se o resultado é "Pedido processado com sucesso".
Resolução
Analisando o código fornecido na imagem, podemos observar a seguinte estrutura:
Letra A está incorreta. O método buscarPorId do repositório é chamado implicitamente durante a execução do processarPedido. O verify do Mockito é usado para validar interações, mas não é obrigatório para o funcionamento do teste.
Letra B está correta. O mock do pedido foi configurado para retornar false no método isValido() através da linha Mockito.when(pedidoMock.isValido()).thenReturn(false);. No entanto, o teste espera que o resultado seja "Pedido processado com sucesso", que só ocorre quando isValido() retorna true. Como o mock retorna false, a condição pedido.get().isValido() será falsa, fazendo com que o método retorne "Falha ao processar pedido" em vez de "Pedido processado com sucesso".
Letra C está incorreta. O código da classe PedidoService está correto e considera adequadamente o caso em que isValido() retorna false, retornando "Falha ao processar pedido" nessa situação.
Letra D está incorreta. A string de comparação no assertEquals está correta para o cenário que o teste pretende validar (caso de sucesso). O problema não está na string esperada, mas sim na configuração do mock.
Letra E está incorreta. O método buscarPorId do repositório está configurado corretamente para retornar um Optional contendo o pedido mock. O problema não está na configuração do repositório, mas sim na configuração do mock do pedido.
O teste falhará porque há uma inconsistência entre a configuração do mock (que faz isValido() retornar false) e a expectativa do teste (que espera o resultado de sucesso). Para que o teste passe, o mock deveria ser configurado com thenReturn(true) ou a expectativa deveria ser alterada para "Falha ao processar pedido".
Resposta: B - Perplexity
Gabarito B
A - buscarporId() foi chamado sim, veja:
Mockito.when(pedidoRepository.buscarPorId("123")).thenReturn(Optional.of(pedidoMock));
C - "está correto", acho que queriam dizer "terá sucesso". Isso é pegadinha. Quem lesse essa alternativa rapidamente e não prestasse atenção poderia cair! Se executar o teste ele FALHARÁ ao invés de sucesso.
Além de falar que "código da classe PedidoService está com ERRO na validação IF", o código do IF esta escrito de forma CORRETA!
D - Acho que cabe recurso, pois essa alternativa é ambígua.
E - Veja no método processarPedido() da classe PedidoService que o método buscarPorid() retorna um OPTIONAL.
No teste é declarado Mockito.when(pedidoRepository.buscarPorId("123")).thenReturn(Optional.of(pedidoMock));
, ou seja, esta retornando um optional normalmente pois o método Optional.of(value): Cria um Optional
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo