繁体   English   中英

如何使用Mockito模拟类数组

[英]How to mock array of class using Mockito

我想模拟Order数组类Order []。class。 下面的MockMapper读取Order []。class并需要返回Order []。class。

服务等级

public class OrdersConnectorImpl {
    public Order getOrderById(String Id, OrderType orderType) throws Exception {

        Response response = null;
        response = orderServiceTarget.queryParam("ID", Id).queryParam(ORDER_TYPE, orderType).request().accept(MediaType.APPLICATION_JSON)
                .get();
        final StatusType responseStatus = response.getStatusInfo();
        final String serverResponseStr = response.readEntity(String.class);
        if (responseStatus.equals(Response.Status.OK)) {
            objectMapper = getObjectMapper(); // we have a private method in this class
            Order[]  orders = objectMapper.readValue(serverResponseStr, Order[].class);
            if(orders.length>0) {
                return orders[0];
            }
        }
    }
}

测试班

      public class OrdersConnectorImplTest {

        private ObjectMapper mockMapper;

        private class MockOrdersConnectorImpl extends OrdersConnectorImpl {

            @Override
            protected ObjectMapper getObjectMapper() {
                return mockMapper;
            }
        }


    }
      @Test
public void test_getRenewalOrderForContract() throws Exception {
    Response mockResponse = mock(javax.ws.rs.core.Response.class);
    Order mockOrder = mock(Order.class);
    when(mockResponse.getStatusInfo()).thenReturn(Status.OK);
    when(mockResponse.readEntity(String.class)).thenReturn("{}");
    when(mockBuilder.get()).thenReturn(mockResponse);
    when(mockMapper.readValue("{}", Order[].class)).thenReturn(mockOrder); // this is the problem line
    orderConnector.getOrderById("id", OrderType.NEW);

}
}

请在这里纠正我如何返回预期。

您已自动装配了mockMapper ,这意味着将注入ObjectMapper的实际对象。

when部分中,您应该设置mockMapper的行为,事实并非如此。

编辑1

在您的情况下,无需模拟Order类,您必须返回可以在测试中创建的Order数组。 仅供参考,使用Junit无法实现,您可以模拟在方法内部创建的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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