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

Java/Spring项目单元测试缓存功能不生效该如何解决?

Spring Boot 缓存注解方法单元测试问题解决方案

问题表现

测试标注了缓存配置的LabelService业务方法时,出现两类可复现问题:

  • 使用@Autowired直接注入LabelServiceImpl实例时,抛出空指针异常
  • 改用@InjectMocks注入实例无运行报错,但缓存完全不生效:两次调用findByUuid接口均会触发LabelRepository的查询逻辑,多次调整测试类注解组合无法解决

根因定位

mockito-core 3.3.3版本与Spring Boot测试框架的缓存代理加载逻辑存在兼容性缺陷,不升级版本直接调整注解会触发java.lang.NoSuchMethodError相关报错。

解决方案

按以下步骤调整测试配置即可解决:

  1. 升级项目中mockito-core依赖版本至3.7.0及以上,修复依赖兼容性问题
  2. 测试类添加@SpringBootTest注解,启动Spring测试上下文保证缓存AOP切面被正常加载
  3. 依赖注入逻辑调整:使用@Autowired注入LabelService接口代理实例,使用@MockBean替换上下文中的LabelRepository实现,完成Mock依赖注入

提示:Spring缓存逻辑基于动态代理实现,必须注入容器管理的代理对象,直接通过@InjectMocks实例化的普通对象不会触发缓存切面逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:54:04