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

WebMvc Test无法触发依赖库中的异常处理器,该如何解决?

解决WebMvcTest无法触发依赖库异常处理器的问题

问题核心在于**@WebMvcTest是切片测试**,它默认只会加载当前测试类所在包、指定控制器以及Spring MVC核心组件,依赖库中标注了@RestControllerAdvice/@ControllerAdvice的异常处理器不在默认扫描范围内,导致测试上下文未加载该处理器,抛出异常时无法被自动处理。

给你两种直接有效的解决方式:

方式一:显式导入异常处理器类

找到依赖库中处理CustomException的异常处理器类(比如名为GlobalExceptionHandler),在测试类上用@Import注解将其导入测试上下文:

@WebMvcTest(controllers = MyController.class, excludeAutoConfiguration = {
    SecurityAutoConfiguration.class})
@ExtendWith(SpringExtension.class)
@Import(GlobalExceptionHandler.class) // 导入依赖库的异常处理器类
public class WebMockTest {

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private MyService service;

  
  @Test
  public void shall_make_get_call_404_not_ok() throws Exception {
    when(service.getById(any())).thenThrow(new CustomException("Not found"));
    this.mockMvc.perform(get("/items/" + "12")).andDo(print())
        .andExpect(status().isNotFound());

  }
}

方式二:扫描依赖库的异常处理器包

如果依赖库包含多个相关异常处理组件,可通过@ComponentScan指定依赖库的包路径,让Spring扫描并加载这些组件:

@WebMvcTest(controllers = MyController.class, excludeAutoConfiguration = {
    SecurityAutoConfiguration.class})
@ExtendWith(SpringExtension.class)
@ComponentScan(basePackages = "com.dependency.lib.exception") // 替换为依赖库异常处理器所在包路径
public class WebMockTest {
    // 原代码不变
}

优先推荐方式一,方式二可能会扫描到依赖库中无关组件,导致测试上下文冗余,影响测试效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:15:54