如何为静态并返回 void 的方法进行 JUnit

问题描述

如何为以下方法编写 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 在交互发生之前验证交互。