Mocking objet Java 8 que les retours d'objets en option avec Mockito retourne vide en option

Amy Bachir:

Je tente de se moquer un objet qui retourne un objet Java en option avec Mockito:

SomeObject someObject = new SomeObject();
Mockito.when(someSpringJpaRepository.findById(Mockito.any(UUID.class))).thenReturn(Optional.of(someObject));

Quand someSpringJpaRepository.findById(UUID)est appelé, il retourne Optional.empty.

Je me attends à la méthode findById()pour revenir someObject.
Toute raison pour laquelle il est de retour à la Optional.emptyplace?

Voici la méthode:

public UUID saveOrder(OrderDTO orderDto) {

        Order order = new Order();
        if (orderDto.getId() != null) {
            Optional<Order> result = orderRepository.findById(orderDto.getId());
            if (result != null && result.isPresent()) {
                order = result.get(); // existing record

            } else {
                order.setId(UUID.randomUUID());
            }
        } else {
            // new record
            order.setId(UUID.randomUUID());
        }

        return order.getId();
    }

Et voici le Junit:

@Test
    public void saveOrderTest(){

        @Autowired
        private OrderApiService orderApiService;
        @Mock
        private OrderRepository orderRepository;

        OrderDTO orderDto = new OrderDTO();
        UUID orderID = UUID.randomUUID();
        Order order = new Order();
        order.setId(orderID);

        orderDto.setId(orderID);
        Mockito.when(orderRepository.findById(Mockito.any(UUID.class))).thenReturn(Optional.of(order));
        assertNotNull(orderApiService.saveOrder(orderDto));
    }

Byebye:

Votre @Mocken classe ne fait rien. Vous avez créé une instance distincte orderRepositoryqui n'est pas injecté dans votre classe de service. Pour injecter votre maquette dans l' utilisation du contexte@MockBean

Différence entre @Mocket @MockBean ici

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=180931&siteId=1
conseillé
Classement