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

单元测试中如何让Spy实例的protected方法返回指定值?

解决Mockito Spy中protected方法Stub的空指针问题
  • 结论:完全可以让shouldSetFlag方法返回true,你的空指针异常是因为Stub方式错误导致触发了真实方法执行。

问题根源

你当前使用的when(myClass.shouldSetFlag(anyLong(), any(ObjectA.class), any(ObjectB.class))).thenReturn(true)会先调用真实的shouldSetFlag方法,再进行Stub。由于这是一个protected辅助方法,它可能依赖Spy实例中未初始化的内部状态(比如某些字段为null),从而抛出空指针异常。

正确的Stub方式

使用Mockito的doReturn语法,这种方式会直接跳过真实方法的调用,直接设置返回值:

doReturn(true).when(myClass).shouldSetFlag(anyLong(), any(ObjectA.class), any(ObjectB.class));

额外注意事项

  • 确保测试类与目标类处于同一包路径,这样Mockito可以访问protected方法。如果包路径不同,可以通过反射临时修改方法的访问权限,或者使用Mockito的Whitebox工具类辅助操作。
  • 确认anyLong()、any(ObjectA.class)等匹配器的导入正确(来自org.mockito.ArgumentMatchers),避免因导入错误导致的匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:15:12