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

Spring Boot测试中使用@MockBean如何开启Mockito严格校验模式

解决方案

你遇到的问题本质是@MockBean默认创建的Mockito Mock使用宽松 stubbing 模式,而MockitoExtension默认启用的是严格 stubbing 模式,所以校验逻辑不一致,以下是三种可行的配置方案:


方案1:全局启用严格Stubbing模式(推荐,一劳永逸)

在测试类路径下(一般是src/test/resources)新建mockito.properties配置文件,添加如下配置:

org.mockito.stubbing.defaultStrictness=STRICT_STUBS

配置后所有由Spring创建的@MockBean、以及普通Mockito Mock都会默认启用严格模式,和MockitoExtension的默认行为完全一致。


方案2:单个测试类启用严格模式

如果不想全局修改影响其他测试用例,可以在需要开启严格校验的测试类上添加@MockitoSettings注解:

import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@MockitoSettings(strictness = Strictness.STRICT_STUBS)
class MyServiceTest {
  @MockBean
  MyDependency myDependency;

  @Autowired
  MyService myService;

  @Test
  void execute() {
    given(myDependency.execute("arg0")).willReturn(4);
    myService.execute("arg1"); // 会抛出PotentialStubbingProblem异常
  }
}

该配置仅对当前测试类内的所有Mock生效。


方案3:单个MockBean单独指定严格模式

如果只需要给特定的@MockBean开启严格校验,直接在注解上配置strictness属性即可(Spring Boot 2.2+ 版本支持):

@SpringBootTest
class MyServiceTest {
  @MockBean(strictness = Mock.Strictness.STRICT_STUBS)
  MyDependency myDependency;

  // 其他代码不变
}

该配置仅对当前声明的MockBean生效,不影响其他Mock。


效果验证

配置完成后,之前的测试场景会触发和单元测试完全一致的异常:

  • Stub参数不匹配抛出PotentialStubbingProblem
  • 未使用的Stub抛出UnnecessaryStubbingException

注意事项

如果项目中存在历史测试用例依赖宽松模式的返回逻辑,建议优先使用方案2或方案3做局部适配,避免全局配置导致大量历史用例运行失败。

内容的提问来源于stack exchange,提问作者Joseph K. Strauss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:00