Как я могу проверить в этой ситуации в Java? - PullRequest
0 голосов
/ 24 сентября 2019

Я делаю тест для службы с макетом.

Проблема заключается в создании и внедрении экземпляра непосредственно из класса для тестирования.

Источник показан ниже.

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

Кажется, он его не распознает, потому что служба внедряет новый экземпляр.Я хочу вернуть ложные данные.Что мне делать?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

В следующей строке вы издеваетесь над параметром createOrderReqDTO в качестве параметра:

when(callService.createOrder(createOrderReqDTO)).thenReturn(createOrderResDTO);

, тогда как далее вы передаете какой-то другой объект:

OrderOutDTO order = orderService.createOrder(orderSessionDTO);

Это поведениене распознается, вам придется пройти то же самое, что вы издевались раньше.

0 голосов
/ 24 сентября 2019

Я нашел это сам!

Я использую аргумент Мэтчеры.

when(callService.createOrder(createOrderReqDTO)).thenReturn(createOrderResDTO);

до

when(callService.createOrder(any())).thenReturn(createOrderResDTO);

спасибо.

...