簡體   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