【发布时间】:2019-09-10 18:58:51
【问题描述】:
我正在测试的方法(setEventHubDataPayload 方法抛出 JSONException 和 JsonProcessingException):
public class EventHubMapper {
//inits
public byte[] toEventDataJsonByteArray(UserRecord inbound) {
EventHubDto ehDto = new EventHubDto();
ehDto.setEventTypeVersion(inbound.getVersion());
ehDto.setEventId(inbound.getNotificationId());
JSONObject eventJson = new JSONObject(ehDto);
try {
eventJson.put("data", setEventHubDataPayload(ehDto, inbound));
} catch (JSONException e) {
analytics.trackError(AnalyticsConstants.EventHub.JSON_MAPPING_ERROR, e.toString());
} catch (JsonProcessingException e) {
analytics.trackError(AnalyticsConstants.EventHub.JSON_PROCESSING_ERROR, e.toString());
}
return eventJson.toString().getBytes();
}
}
单元测试代码:
@Test
public void toEventDataByteArray_JsonException() throws JSONException, JsonProcessingException {
EventHubMapper ehmMock = Mockito.spy(eventHubMapper);
doThrow(new JSONException("blah")).when(ehmMock).setEventHubDataPayload(any(), any());
eventHubMapper.toEventDataJsonByteArray(setUpMockUserRecord());
verify(analytics, times(1)).trackError( AnalyticsConstants.EventHub.JSON_MAPPING_ERROR, new JSONException("blah").toString());
}
我尝试使用更具体的匹配器...例如:any(EventHubDto.class) 或 any(UserRecord.class) 并得到相同的结果:
Wanted but not invoked:
analytics.trackError(
"EventHub_Publish_Error",
""
;
还有
Actually, there were zero interactions with this mock.
这是怎么回事?
【问题讨论】:
-
您希望使用 PUBLISH_ERROR 和空字符串调用 trackError。但是你实际上用 JSON_MAPPING_ERROR 和 e.toString() 来调用它。 PUBLISH_ERROR 是否等于 JSON_MAPPING_ERROR 值? e.toString() 的值是多少?是空字符串吗?
-
这些是拼写错误,我已修复,仍然有同样的错误,@noname 如果您查看失败原因,则没有提及参数
-
您正在对
ehmMock实例进行doThrow调用。而setEventHubDataPayload的实际调用发生在eventHubMapper实例上。所以模拟ehmMock没有被使用。尝试做ehmMock.toEventDataJsonByteArray
标签: spring unit-testing junit mockito powermock