繁体   English   中英

如何在 java 中测试这种情况?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM