gpt4 book ai didi

java - 使用 Mockito 返回 Java 8 可选对象的模拟对象返回空可选

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:41 24 4
gpt4 key购买 nike

我正在尝试使用 Mockito 模拟一个返回 Java Optional 对象的对象:

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

someSpringJpaRepository.findById(UUID) 被调用时,它返回 Optional.empty

我期待方法 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));
}

最佳答案

你在类里面的@Mock什么都不做。您创建了一个单独的 orderRepository 实例,它没有注入(inject)到您的服务类中。要将模拟注入(inject)上下文,请使用 @MockBean

@Mock@MockBean 的区别 here

关于java - 使用 Mockito 返回 Java 8 可选对象的模拟对象返回空可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com