我正在尝试模拟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;
}
我不明白这里出了什么问题?需要帮助。
答案 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 {