如何让自定义@RestControllerAdvice在SpringBoot的@WebMvcTest中自动配置?
解决@WebMvcTest中自动加载自定义@RestControllerAdvice的方法
要让你的自定义@RestControllerAdvice在@WebMvcTest中自动生效,不用每个测试手动注入,核心是让Spring Boot的自动配置机制在测试场景下也能识别并加载你的配置,具体可以这么做:
1. 规范自动配置的注册方式
确保你的自定义@AutoConfiguration类被Spring Boot的自动配置扫描机制识别:
- 在你的复用模块的
META-INF/spring/目录下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,把你的自动配置类的全限定名写进去(比如com.yourpackage.YourRestControllerAdviceAutoConfig)。这是Spring Boot 2.7+推荐的自动配置注册方式,能保证包括@WebMvcTest在内的各种场景都能自动加载符合条件的配置。
2. 给自动配置类添加适配WebMvc测试的条件注解
在你的@AutoConfiguration类上添加合适的条件注解,确保它在WebMvc测试场景下被激活:
@AutoConfiguration @ConditionalOnWebMvc // 仅在WebMvc环境(包括测试)下生效 @ConditionalOnClass(RestControllerAdvice.class) // 确保依赖存在 public class YourRestControllerAdviceAutoConfig { @Bean public YourCustomRestControllerAdvice yourCustomRestControllerAdvice() { return new YourCustomRestControllerAdvice(); } }
这里的@ConditionalOnWebMvc会让配置在@WebMvcTest的测试上下文里被触发,因为@WebMvcTest本身就是模拟WebMvc环境的。
3. 排除可能的冲突配置
如果你的@RestControllerAdvice有@ConditionalOnMissingBean这类注解,要确保测试环境中没有提前注册同类型的Bean,否则自动配置会被跳过。如果是测试中不小心引入了冲突Bean,可以在@WebMvcTest里用@MockBean或者@ExcludeAutoConfiguration排除掉。
这样调整后,所有使用@WebMvcTest的测试类都会自动加载你的自定义@RestControllerAdvice,不用再手动@Autowired了。
内容的提问来源于stack exchange,提问作者markus_
相关产品推荐
相关产品推荐

