Questão nº 32

Questão de Tecnologia da Informação · FCC TRT15 2024 (nº 32)

FCC2024Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Bver comentário ↓

Considere o seguinte trecho de código em Java, utilizando JUnit e Mockito para testar o comportamento de uma classe de serviço.

```java
public class PedidoService {

private final PedidoRepository pedidoRepository;

public PedidoService(PedidoRepository pedidoRepository) {
this.pedidoRepository = pedidoRepository;
}

public String processarPedido(String pedidoId) {
Optional<Pedido> pedido = pedidoRepository.buscarPorId(pedidoId);

if (pedido.isPresent() && pedido.get().isValido()) {
return "Pedido processado com sucesso";
} else {
return "Falha ao processar pedido";
}
}
}

@ExtendWith(MockitoExtension.class)
class PedidoServiceTest {

@Mock
private PedidoRepository pedidoRepository;

@InjectMocks
private PedidoService pedidoService;

@Test
void testeProcessarPedidoSucesso() {
Pedido pedidoMock = Mockito.mock(Pedido.class);
Mockito.when(pedidoMock.isValido()).thenReturn(false);
Mockito.when(pedidoRepository.buscarPorId("123")).thenReturn(Optional.of(pedidoMock));
String resultado = pedidoService.processarPedido("123");
Assertions.assertEquals("Pedido processado com sucesso", resultado);
}
}
```

Ao se executar o código em condições ideais, o teste

Resposta comentada

Gabarito Alternativa B

Testes de unidade com Mockito permitem simular o comportamento de dependências (objetos que uma classe usa) para isolar a classe sendo testada. O objetivo é garantir que a classe se comporta corretamente em diferentes cenários, configurando os "mocks" (simulações) para esses cenários.

(A) Incorreta: O método `buscarPorId` do `pedidoRepository` foi chamado e configurado para retornar um valor. O `verify` é usado para checar se um método foi chamado, mas a falha aqui não é por falta de chamada, e sim por uma lógica de retorno.
(B) Correta: O teste se chama `testeProcessarPedidoSucesso`, indicando que ele deveria testar o caminho de sucesso. Para que o `PedidoService` retorne "Pedido processado com sucesso", a condição `pedido.get().isValido()` precisa ser `true`. No entanto, o mock de `Pedido` (`pedidoMock`) foi configurado com `Mockito.when(pedidoMock.isValido()).thenReturn(false);`, fazendo com que a condição de sucesso seja falsa e o método retorne "Falha ao processar pedido", causando a falha na asserção.
(C) Incorreta: O código da classe `PedidoService` está correto em sua lógica. Ele explicitamente trata o caso onde `isValido` retorna `false` (ou o pedido não existe), retornando "Falha ao processar pedido". Não há erro na condição do serviço.
(D) Incorreta: A string de comparação no `Assertions.assertEquals` está correta para o que o teste pretende verificar (um cenário de sucesso). O problema não é a expectativa, mas a configuração do mock que impede que essa expectativa seja alcançada. A armadilha aqui é confundir a expectativa do teste com o resultado real causado pela configuração do mock. O teste quer validar o sucesso, então espera a mensagem de sucesso.
(E) Incorreta: O método `buscarPorId` do `pedidoRepository` foi corretamente mockado para retornar `Optional.of(pedidoMock)`, o que significa que um pedido foi encontrado. O problema não está na busca do pedido, mas na validade do pedido retornado.

Fonte: FCC TRT15 2024 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho