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

使用@WebMvcTest测试控制器时需Mock无关Bean的原因及解决方案

问题根因

你对@WebMvcTest的使用方式存在错误。@WebMvcTest默认会扫描项目中所有的@Controller、@RestController类加载到测试上下文,而非仅加载你目标测试的控制器。因此哪怕你只测试UsersController,上下文初始化时也会尝试创建BooksController的实例,而你没有为BooksController依赖的LibraryBookService提供对应Bean,自然就会抛出依赖缺失的异常。

解决方案

@WebMvcTest原生支持指定要加载的控制器范围,你只需要在注解中显式声明你要测试的控制器类即可,Spring只会加载指定的控制器,不会扫描其他无关控制器,也就不会触发无关的依赖检查:

// 显式指定仅加载UsersController到测试上下文
@WebMvcTest(UsersController.class)
class UsersControllerTest {

    @Autowired
    MockMvc mvc;

    @MockBean
    DataService dataService;

    @BeforeEach
    void resetMocks() {
        Mockito.reset(this.dataService);
    }
    // ...
}

如果需要同时测试多个控制器,也可以传入类数组:@WebMvcTest({UsersController.class, XXXController.class})。该方案完全不会受后续新增控制器的影响,不需要添加多余的MockBean。


内容的提问来源于stack exchange,提问作者Roddy of the Frozen Peas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:39:03