代码之家  ›  专栏  ›  技术社区  ›  Kiran

如何使用mockito模拟类数组

  •  0
  • Kiran  · 技术社区  · 7 年前

    我想模拟顺序数组类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);
    
    }
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Thiru    7 年前

    你已经自动连线了 mockMapper 也就是说,将注入objectmapper的实际对象。

    when 部分,您设置mockmapper的行为,这不应该是这样。

    编辑1

    在您的情况下,不需要模拟order类,您必须返回可以在测试中创建的数组顺序。 对于您的信息,使用junit是不可能的,您可以模拟在方法中创建的对象。