1
resposta

Teste retornando 200 ao invés de 404

@Test
    @DisplayName("Teste findByAccountId que deve retornar 404 se não houver transações")
    void findByAccountIdNoTransactions() throws Exception {
        Long accountId = 12345L;

        // Mock do serviço para retornar uma lista de transações vazia
        when(service.findByAccountId(anyLong())).thenReturn(Collections.emptyList());

        var response = mvc.perform(get("/transaction/accountId/{accountId}", accountId))
                .andExpect(status().isNotFound())
                .andReturn().getResponse();
    }

Esse meu teste está retornando 200, mas quando disparo pelo Postman ou swagger dá 404, com a frase que configurei ""Não há registros para os parametros informados!""

public List<TransactionResponse>findByAccountId(Long accountId) {
        List<Transaction> transactions = repository.findByAccountId(accountId);
        if(transactions.isEmpty()) throw new EntityNotFoundException();
        return transactions.stream()
                .map(TransactionResponse::new)
                .collect(Collectors.toList());
    }
@org.springframework.web.bind.annotation.ExceptionHandler(EntityNotFoundException.class)
    public ResponseEntity trataError404(EntityNotFoundException exception) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Não há registros para os parametros informados!");
    }
1 resposta

Oi!

Nesse seu caso não vai devolver 404 mesmo, pois você configurou a service para devolver uma lista vazia:

when(service.findByAccountId(anyLong())).thenReturn(Collections.emptyList());

Mas a exception é lançada apenas quando o repository devolve uma lista vazia:

List<Transaction> transactions = repository.findByAccountId(accountId);
if(transactions.isEmpty()) throw new EntityNotFoundException();