You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mockito中如何Mock返回Void且执行真实逻辑的方法?

Mockito调用返回Void方法的真实逻辑解决办法

问题原因梳理

  1. when(MockedObject.methodReturingVoid(any())).callRealMethod()报错:Mockito的when()语法仅支持有返回值的方法,返回void的方法无法用这种链式调用,直接触发语法错误。
  2. doCallRealMethod().when(MockedObject).methodReturingVoid(any())空指针:any()在部分场景下会返回null,如果原方法对参数有非空校验,就会触发NPE。

可行解决方案

根据原方法的参数校验规则,选择对应写法:

  • 参数允许null的场景:使用带nullable()的匹配器(Mockito 3.0+支持),避免any()返回null触发校验失败:
    doCallRealMethod().when(mockedObject).methodReturingVoid(any(YourParamType.class).nullable());
    
  • 参数不允许null的场景:直接传入一个合法的参数实例,替代any():
    // 假设原方法参数是String,传入合法字符串
    doCallRealMethod().when(mockedObject).methodReturingVoid("validParam");
    
  • 匹配任意非null参数:明确指定参数类型的any()匹配器,确保Mockito生成符合类型要求的非null实例(部分类型默认会生成非null实例):
    doCallRealMethod().when(mockedObject).methodReturingVoid(any(YourParamType.class));
    

核心注意点

处理返回void的方法时,必须使用doCallRealMethod().when(...)的语法结构,不能用when(...).callRealMethod(),这是Mockito针对void方法的固定语法规则。

内容的提问来源于stack exchange,提问作者Jef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:30:55