仅用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
相关产品推荐
相关产品推荐

