Mockito中如何Mock返回Void且执行真实逻辑的方法?
Mockito调用返回Void方法的真实逻辑解决办法
问题原因梳理
when(MockedObject.methodReturingVoid(any())).callRealMethod()报错:Mockito的when()语法仅支持有返回值的方法,返回void的方法无法用这种链式调用,直接触发语法错误。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
相关产品推荐
相关产品推荐

