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

@ExtendWith(SpringExtension.class)与@SpringBootTest的测试差异

两段Spring测试代码的功能差异对比

基础背景先理清

@ExtendWith(SpringExtension.class)是JUnit 5和Spring测试框架的衔接工具,它只负责让JUnit 5能识别Spring的相关特性,但本身不会自动启动Spring上下文——得搭配@ContextConfiguration这类注解,才会加载指定的Spring容器。

@SpringBootTest是Spring Boot专门做集成测试的注解,它底层已经包含了@ExtendWith(SpringExtension.class)的能力,还会自动加载Spring Boot的完整应用上下文(默认找项目里的@SpringBootApplication类),同时附带一堆Spring Boot专属的测试特性。


第一段代码能实现但第二段做不到的

  • 轻量化、自定义的上下文加载:可以搭配@ContextConfiguration指定任意单个/多个配置类或XML文件,不用加载整个Spring Boot应用的所有Bean,测试启动更快,适合只测某几个组件的场景。
  • 支持普通Spring项目测试:如果你的项目是传统Spring项目(不是Spring Boot),@SpringBootTest完全用不了,但@ExtendWith(SpringExtension.class)能配合Spring的其他测试注解(比如@Transactional、@MockBean)完成标准Spring测试。
  • 自由组合JUnit扩展:可以同时搭配多个自定义的JUnit 5 Extension,不受Spring Boot测试框架的绑定,自由度更高。

第二段代码能实现但第一段做不到的

  • 自动加载完整Spring Boot上下文:不用手动指定配置类,自动识别项目主启动类,加载所有自动配置、Bean、外部配置,适合做全链路集成测试,验证整个应用的协同逻辑。
  • 内置Web环境配置:通过webEnvironment参数可以灵活配置Web环境,比如示例里的RANDOM_PORT会启动真实内嵌服务器并使用随机端口,还支持模拟Servlet环境、指定端口等,方便直接测试Controller、过滤器等Web组件。
  • Spring Boot专属测试特性:能自动注入TestRestTemplate或WebTestClient来调用接口,支持@TestConfiguration自定义测试专属配置,替换容器Bean时更适配Spring Boot的自动配置逻辑,还能直接复用Spring Boot的profile、外部配置文件等特性。
  • 简化测试注解组合:不用手动拼@ExtendWith+@ContextConfiguration+@WebAppConfiguration一堆注解,一个@SpringBootTest就能搞定大部分Spring Boot应用的集成测试需求。

内容的提问来源于stack exchange,提问作者work-in-progress

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:02:35