如何模拟ObjectMapper readValue方法?

时间:2017-05-09 10:35:32

标签: java unit-testing junit mockito

我正在尝试模拟MAPPER.readValue(),但无法获得预期的输出。

private static final ObjectMapper MAPPER = new ObjectMapper();

String res = EntityUtils.toString(response.getEntity());
PartyDetailInfo partyInfo = MAPPER.readValue(res, PartyDetailInfo.class);

        if (partyInfo.getXpartyInfo() == null || partyInfo.getXpartyInfo().getXpartyInfoItem() == null
                || partyInfo.getXpartyInfo().getXpartyInfoItem().get(0).getOrigSystemRefs() == null
                || partyInfo.getXpartyInfo().getXpartyInfoItem().get(0).getOrigSystemRefs().getOrigSystemRefsItems()
                        .isEmpty()) {
            BusinessException exception = new BusinessException(Constants.ERROR_PARTY_ID_NOT_EXIST
                    .replace(Constants.TEMP_ZERO_REPLACE_STRING, partyDetailRequest.getPartyId()));
            exception.setErrorCode(Integer.toString(HttpStatus.SC_NOT_FOUND));
            throw exception;
        }

我试过嘲笑它,但我是partyInfo = null;

Mockito.when(Mapper.readValue(Mockito.anyString(),Mockito.eq(PartyDetailInfo.class))).thenReturn(getPartyInfoDummy());

这是getPartyInfoDummy():

private PartyDetailInfo getPartyInfoDummy(){
    List<XpartyInfoItem> xpartyInfoItems = new ArrayList<XpartyInfoItem>();

    XpartyInfoItem infoItem = new XpartyInfoItem();
    OrigSystemRefs origSystemRefs = new OrigSystemRefs();
    OrigSystemRefsItem origSystemRefsItem = new OrigSystemRefsItem();
    List<OrigSystemRefsItem> origSystemRefsItems = new ArrayList<OrigSystemRefsItem>();
    origSystemRefsItem.setOrigSystem("PSFT");
    origSystemRefsItem.setOrigSystemReference("PS-47439934");
    PrimaryMlsSet primaryMlsSet = new PrimaryMlsSet();
    primaryMlsSet.setNil("true");
    origSystemRefsItem.setPrimaryMlsSet(primaryMlsSet );
    origSystemRefsItems.add(origSystemRefsItem);
    origSystemRefs.setOrigSystemRefsItems(origSystemRefsItems );
    infoItem.setOrigSystemRefs(origSystemRefs);

    xpartyInfoItems.add(infoItem);
    PartyDetailInfo partyInfo = new PartyDetailInfo();
    XpartyInfo xpartyInfo = new XpartyInfo();

    xpartyInfo.setxReturnStatus(null);
    xpartyInfo.setxErrMsgs(null);
    xpartyInfo.setXpartyInfoItem(xpartyInfoItems);

    partyInfo.setXpartyInfo(xpartyInfo);

    return partyInfo;
}

我不明白这里出了什么问题?需要帮助。

4 个答案:

答案 0 :(得分:2)

当你说Mockito.when(Mapper.readValue时 请确保映射器是一个模拟对象,并将模拟映射器设置为您要测试的实例。

答案 1 :(得分:1)

首先,Mapper是本地创建的对象,其次是静态和最终的。你不能使用mockito来模拟这样的对象。使用Powermock。

答案 2 :(得分:1)

在这类问题中,当我遇到类似的问题时,您也可以尝试使用Mockito.doReturn(...).when(...)

答案 3 :(得分:0)

这在类似的情况下对我有用:

        doThrow(IOException.class).when(objectMapper).readValue(any(A_Random_Class.class), any(Class.class));

这是我尝试模拟的方法:

public <T> T readValue(File src, JavaType valueType) throws IOException, JsonParseException, JsonMappingException {