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

Mockito使用when/thenReturn给spy对象打桩触发真实方法抛NPE问题

问题根因

你遇到的空指针是Mockito的spy对象打桩语法特性导致的:

  • spy是基于真实类实例生成的代理对象,和完全虚拟的普通mock对象不同,spy默认会执行方法的真实逻辑
  • 当你使用when(spy.方法(参数匹配器)).thenReturn(返回值)的语法打桩时,when括号内的spy.方法(...)会真实执行一次,此时参数匹配器eq()/any()对应的实际入参为null,直接触发你代码中遍历cookies的空指针异常。
修复方案

直接替换打桩语法即可,使用doReturn().when()的写法,该语法不会触发方法的真实执行:

// 删掉原来的when().thenReturn()代码,替换为下面的写法
doReturn(fakeCookieList).when(theSpy).mergeList(eq(aCookieList), any(HttpCookie.class));
注意事项
  • 给spy对象打桩优先选择doReturn/when、doThrow/when这类语法,避免触发不必要的真实逻辑
  • 普通mock对象因为默认无方法真实实现,所以即使使用when().thenReturn()也不会出现这类问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:00:01