JUnit5@SpringBootTest与@ExtendWith(SpringExtension.class)使用问题
JUnit 5 搭配Spring测试相关问题解答
针对提到的三个问题,直接给出明确结论和说明:
- 完全可以单独使用
@ExtendWith(SpringExtension.class),不搭配@SpringBootTest注解。SpringExtension本身的作用只是打通JUnit 5的测试生命周期与Spring Test上下文框架的对接,它本身不绑定Spring Boot的自动上下文加载逻辑,你可以根据测试需要手动指定要加载的配置、Bean集合。 @SpringBootTest已经内置包含@ExtendWith(SpringExtension.class)的说法完全正确。从Spring Boot 2.1版本开始,@SpringBootTest注解源码上就已经加了@ExtendWith(SpringExtension.class)的元注解,使用时不需要重复叠加该注解,重复编写也不会产生报错,仅属于冗余配置。- 仅标注
@ExtendWith(SpringExtension.class)的轻量测试,属于完全合规、正确的测试实现。测试本身是分层的,并不是所有Spring相关测试都必须加载完整应用上下文:- 不加载完整Spring上下文的轻量测试,一般用于单元测试或者窄范围集成测试场景,你可以配合
@ContextConfiguration加载少量必要的Bean、用@MockBean隔离外部依赖,这类测试启动速度快、依赖边界清晰,在测试分层中是优先推荐的实现方式。 @SpringBootTest对应的是全量上下文加载的重型集成测试,仅适合用于验证应用整体Bean装配、全链路逻辑、自动配置生效等场景。
- 不加载完整Spring上下文的轻量测试,一般用于单元测试或者窄范围集成测试场景,你可以配合
注意:单独使用
@ExtendWith(SpringExtension.class)时,如果不搭配@ContextConfiguration、@WebMvcTest这类指定上下文配置的注解,Spring不会自动扫描装配项目中的Bean,运行时会因为找不到可用的测试上下文抛出异常,需要根据测试范围手动声明需要加载的配置类。
内容的提问来源于stack exchange,提问作者hishamss
相关产品推荐
相关产品推荐

