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

仅用Spring注解时@Mock为何生效?Spring与Mockito联动疑问

为什么仅用Spring的@SpringBootTest时Mockito的@Mock会生效?

先看你提供的测试代码:

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Testing {

  @Mock
  MyObject sp1;

  @Test
  public void test1() {
    assertNotNull(sp1);
  }
}

核心原因是Spring Boot Test的自动整合机制:

  • @SpringBootTest是Spring Boot提供的复合注解,它依赖的spring-boot-test-starter已经内置了Mockito的相关依赖与自动配置。
  • 当你使用该注解时,Spring Boot会自动注册MockitoPostProcessor后置处理器,这个处理器会扫描测试类中的Mockito注解(包括@Mock、@Spy等),自动创建对应的Mock实例并注入到字段中,无需手动添加@ExtendWith(MockitoExtension.class)。
  • 另外,@SpringBootTest本身已经包含了@ExtendWith(SpringExtension.class)的功能,你代码里的这个注解其实可以省略。

补充说明:如果是纯Spring Test环境(仅用@ExtendWith(SpringExtension.class)+普通@Test,不使用@SpringBootTest),@Mock不会生效,因为此时没有Spring Boot的自动配置来启用Mockito的注解支持。

内容的提问来源于stack exchange,提问作者work-in-progress

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:29:50