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

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},问题解决,augmentedMockMvc Bean正常注册;
  • 移除Bean上的@ConditionalOnBean注解,也能正常运行——这说明MockMvc Bean实际存在,但Spring在评估@ConditionalOnBean注解时未检测到它。

疑问

为什么@ConditionalOnBean无法识别@AutoConfigureMockMvc引入的MockMvc Bean?按预期@AutoConfigureMockMvc应该足以将MockMvc加入上下文,可现在必须显式把MockMvcAutoConfiguration.class加到@ContextConfiguration中才行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:37:44