[英]How can I test in this situation in java?
我正在使用模拟测试服务。
问题是直接从 class 创建和注入实例进行测试。
来源如下图。
public OrderOutDTO createOrder(OrderSessionDTO orderSessionDTO) {
Order order = orderRepository.save(new Order(orderSessionDTO));
CreateOrderResDTO callServiceOrder = callService.createOrder(new CreateOrderReqDTO(order));
CreateOrderReqDTO createOrderReqDTO = mock(CreateOrderReqDTO.class);
createTrace(order, callServiceOrder.getData().getReceipt().getTransactionHash(), Trace.PUBLIC);
return new OrderOutDTO(order, null);
}
和测试源如下所示。
@Test
public void createOrder() {
// given
CallService callService = mock(CallService.class);
CreateOrderResDataDTO createOrderResDataDTO = mock(CreateOrderResDataDTO.class);
// when
when(callService.createOrder(createOrderReqDTO)).thenReturn(createOrderResDTO);
OrderOutDTO order = orderService.createOrder(orderSessionDTO);
// then
assertThat(order, is(Matchers.notNullValue()));
assertThat(order.getOrder(), is(Matchers.notNullValue()));
assertThat(order.getOrder().getReceiver().getName(), is("test"));
}
我以为这次测试会顺利完成。 但是在下面的代码中,它返回null
并且失败了。
// callService.createOrder(new CreateOrderReqDTO(order)) return null
CreateOrderResDTO callServiceOrder = callService.createOrder(new CreateOrderReqDTO(order));
它似乎无法识别它,因为该服务注入了一个新实例。 我想要返回模拟数据。 我应该怎么办?
在以下行中,您将 createOrderReqDTO 上的createOrderReqDTO
行为作为参数:
when(callService.createOrder(createOrderReqDTO)).thenReturn(createOrderResDTO);
而进一步,您正在传递一些其他 object:
OrderOutDTO order = orderService.createOrder(orderSessionDTO);
此行为无法识别,您必须传递您之前嘲笑过的相同内容。
我自己找到了!
我使用参数匹配器。
when(callService.createOrder(createOrderReqDTO)).thenReturn(createOrderResDTO);
至
when(callService.createOrder(any())).thenReturn(createOrderResDTO);
谢谢你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.