SpringBootTest中@ConditionalOnBean未触发:MockMvc Bean已存在却不被识别
问题:@ConditionalOnBean无法识别@AutoConfigureMockMvc引入的MockMvc Bean
背景代码
自定义自动配置类
该类已在spring.factories中正确注册,作为Maven依赖引入Spring Boot应用:
@Configuration public class MyAutoConfiguration { @AutoConfigureAfter(MockMvcAutoConfiguration.class) class MyNestedAutoConfiguration { @ConditionalOnBean(MockMvc.class) @Bean AugmentedMockMvc augmentedMockMvc(MockMvc mockMvc) { return new AugmentedMockMvc(mockMvc); } } }
Spring Boot应用主类
@SpringBootApplication public class MySpringBootApp { public static void main(String[] args) { SpringApplication.run(MySpringBootApp.class, args); } }
集成测试类
@SpringBootTest(classes = {MySpringBootApp.class}) @AutoConfigureMockMvc @ContextConfiguration(initializers = {MyInitializer.class}) class MyTest { @Autowired private AugmentedMockMvc augmentedMockMvc; }
说明:MyInitializer无实际功能但必须保留,因此必须同时使用@SpringBootTest和@ContextConfiguration。
问题现象
当前配置下,augmentedMockMvc Bean未被创建,原因是不满足@ConditionalOnBean(MockMvc.class)的条件。
已尝试的解决方案
- 给
@ContextConfiguration添加classes = {MockMvcAutoConfiguration.class},问题解决,augmentedMockMvcBean正常注册; - 移除Bean上的
@ConditionalOnBean注解,也能正常运行——这说明MockMvc Bean实际存在,但Spring在评估@ConditionalOnBean注解时未检测到它。
疑问
为什么@ConditionalOnBean无法识别@AutoConfigureMockMvc引入的MockMvc Bean?按预期@AutoConfigureMockMvc应该足以将MockMvc加入上下文,可现在必须显式把MockMvcAutoConfiguration.class加到@ContextConfiguration中才行。
内容的提问来源于stack exchange,提问作者abaudat
相关产品推荐
相关产品推荐

