问题描述
如何为以下方法编写 JUnit?
public static void invokeAuditService(HttpServletRequest request,Date serviceCallTime,String response,String activityKey,JSONObject detailsReplaceVal,String pmAccountId){
AuditLogUtils.invokeAuditService(request,serviceCallTime,response,activityKey,detailsReplaceVal,pmAccountId);
}
我的代码:
@Test
public void testInvokeAuditService() {
powermockito.donothing().when(WidgetHelper.class);
WidgetHelper.invokeAuditService(Matchers.anyObject(),Matchers.anyObject(),Matchers.anyObject());
}
我收到编译器错误: WidgetHelper 类型中的 invokeAuditService(HttpServletRequest,Date,String,JSONObject,String) 方法不适用于参数 (Object,Object,Object)
更新代码:
@Test
public void testInvokeAuditService() {
powermockito.donothing().when(WidgetHelper.class);
WidgetHelper.invokeAuditService(servletRequest,date,"abc","xyz",json,"123");
verifyStatic(WidgetHelper.class,Mockito.times(1));
WidgetHelper.invokeAuditService(servletRequest,"123");
}
这表示:verifystatic 之后的行“实际上与此模拟的交互为零”。
解决方法
您在 Object
方法参数中将所有值作为 invokeAuditService
传递。所以你得到了这个编译器错误。
例如,你应该传递serviceCallTime,response,activityKey,detailsReplaceVal,pmAccountId
如果您没有所有参数的值,则将值作为 null
值发送,但 null
值应在 invokeAuditService
方法中处理以避免 NullpointerException
。
修改如下代码
@Test
public void testInvokeAuditService() {
PowerMockito.doNothing().when(WidgetHelper.class);
WidgetHelper.invokeAuditService(null,null,null);
}
现在您的编译器错误将得到解决,也许您会在运行时遇到 NullpointerException
这有效:
@Test
public void testInvokeAuditServiceWithSuccessFlagAndResponse() {
PowerMockito.doNothing().when(WidgetHelper.class);
WidgetHelper.invokeAuditService(servletRequest,date,"abc",json,"123","Y");
verifyStatic(WidgetHelper.class,Mockito.times(1));
}
我实际上是要求 Mockito 在交互发生之前验证交互。