Mocking Object, который возвращает Java 8 Необязательный Object с Mockito возвращает Empty Необязательно - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь смоделировать объект, который возвращает необязательный объект Java, с помощью Mockito:

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

Когда вызывается someSpringJpaRepository.findById(UUID), возвращается Optional.empty.

I 'Я ожидаю, что метод findById() вернет someObject.
Любая причина, почему он возвращает Optional.empty вместо этого?

Вот метод:

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();
    }

А вот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));
    }

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ваш @Mock в классе ничего не делает.Вы создали отдельный экземпляр orderRepository, который не внедряется в ваш класс обслуживания.Чтобы ввести макет в контекст, используйте @MockBean

Разница между @Mock и @MockBean здесь

0 голосов
/ 26 февраля 2019

вы можете попробовать использовать шпионский метод

Repository spyRepo = Mockito.spy(someSpringJpaRepository);
Mockito.doReturn(Optional.of(someObject)).when(spyRepo).findById(Mockito.any(UUID.class));
...