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

Spring Boot 3.1中@MockBean无法Mock类的问题咨询

问题原因分析

这个问题的核心原因是Spring Boot 3.x 升级后,Mockito 默认不再支持 Mock 最终类(final class),你的AuditService2大概率是一个没有实现接口的最终类。

具体细节:

  • Spring Boot 2.x 版本中,spring-boot-test-autoconfigure会自动配置 Mockito 的inline-mock-maker,允许 Mock 最终类、方法以及静态方法。
  • 升级到 Spring Boot 3.x 后,这个默认配置被移除了。Mockito 默认使用subclass-mock-maker,只能 Mock 非最终类和接口——这就是为什么作为接口的AuthorizationManager能被正常 Mock,而AuditService2(如果是 final 类)会被注入真实 Bean 的原因。

另外还有一种小概率情况:如果AuditService2的 Bean 是通过自定义@Bean方法注册,且该方法带有@Conditional相关注解,可能导致@MockBean无法正确替换原 Bean,但这种场景远不如 final 类的情况常见。

解决办法
  • 方法一:给AuditService2定义对应接口,让类实现该接口,测试中 Mock 对应的接口(推荐,符合面向接口编程规范)。
  • 方法二:开启 Mockito 的 inline mock maker 支持:
    1. 在测试资源目录下创建mockito-extensions文件夹
    2. 新建文件org.mockito.plugins.MockMaker,文件内容写入:mock-maker-inline

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:00