@springboottest能无缝集成spring容器,自动加载应用上下文、支持@autowired注入、aop与事务,适用于集成测试;配合@webmvctest、@datajpatest等切片注解可按需加速测试。

直接用 @SpringBootTest 就能无缝集成 Spring 容器,不用手动 new ApplicationContext,也不用写重复的上下文加载代码。核心是让测试类被 Spring 管理起来,自动完成 Bean 注入、AOP 生效、事务控制等能力。
用 @SpringBootTest 启动轻量级上下文
这是最常用也最推荐的方式,尤其适合集成测试场景:
- 它会扫描主配置类(默认找带有
@SpringBootApplication的类),启动完整或裁剪后的 Spring Boot 上下文 - 支持
@Autowired自动注入任意 Bean,包括 Service、Repository、ConfigurationProperties 等 - 可配合
@TestConfiguration或@Import补充测试专用配置 - 若只想加载部分组件(比如只测 Web 层),可用
@WebMvcTest;只测数据层,用@DataJpaTest
避免全量启动:按需选择测试注解
不是所有测试都需要整个应用上下文,选对注解能大幅提速:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
@WebMvcTest:仅加载 Web 层(Controller + MVC 自动配置),自动 mock 服务层,适合接口逻辑验证 -
@DataJpaTest:只启用 JPA/Hibernate 和内存数据库(如 H2),用于 Repository 测试 -
@JdbcTest/@JsonTest:分别聚焦 JDBC 操作和 JSON 序列化/反序列化 - 纯业务逻辑单元测试?直接去掉 Spring 注解,用
@ExtendWith(MockitoExtension.class)+@Mock/@InjectMocks隔离依赖
依赖注入与模拟协作
真实 Bean 和 Mock 对象可以共存,按需组合:
- 用
@MockBean替换容器中某个 Bean(比如替换掉调用第三方 API 的 Client),不影响其他 Bean 加载 - 用
@SpyBean包裹真实 Bean,在保留原有行为基础上,对部分方法做 stub 或 verify 调用 - 不加任何注解的字段,只要类型匹配,仍会从上下文中自动注入——无需
@Autowired也能生效(但建议显式写上,更清晰)
确保依赖已就位
项目里必须有 spring-boot-starter-test,它已内置 JUnit 5、Spring Test、Mockito、AssertJ 等:
- Maven 中只需声明一个依赖(Spring Boot 2.2+ 默认支持 JUnit 5):
- 不需要单独引
junit-jupiter或spring-test,除非要覆盖版本 - 如需排除旧版 JUnit 4 兼容支持,可加
<exclusions></exclusions>过滤junit-vintage-engine
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










