@springboottest 可自动加载轻量级应用上下文并完成依赖注入、aop 和事务控制,适合验证真实组件协作;配合 @webmvctest、@datajpatest 等切片注解可加速测试;支持 @mockbean/@spybean 混合使用真实与模拟对象;需引入 spring-boot-starter-test。

直接用 @SpringBootTest 就能测试依赖注入的组件行为,不用手动加载上下文,也不用 new 实例。关键在于让 Spring 管理测试类,自动完成 Bean 注入、AOP 生效和事务控制。
用 @SpringBootTest 启动轻量级应用上下文
这是最常用的方式,适合验证 Service、Repository、ConfigurationProperties 等真实组件的协作行为:
- 默认扫描带有
@SpringBootApplication的主类,构建完整或裁剪后的上下文 -
@Autowired可直接注入任意 Spring Bean,包括被@Service、@Repository、@Component标记的类 - 若需补充测试专用配置,可用
@TestConfiguration或@Import - 避免在每个测试类里重复写上下文配置,Spring Boot 自动帮你搞定
按需选择切片测试注解加速执行
不是所有测试都需要整个上下文,选对注解能显著缩短运行时间:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
@WebMvcTest:只加载 Controller 层 + MVC 自动配置,自动 mock 掉 Service 层,适合验证接口逻辑和返回状态 -
@DataJpaTest:仅启用 JPA/Hibernate 和内存数据库(如 H2),用于测试 Repository 方法与 SQL 映射 -
@JdbcTest或@JsonTest:分别聚焦 JDBC 查询结果或 JSON 序列化/反序列化行为
混合使用真实 Bean 与 Mock 对象
真实依赖和模拟对象可以共存,按测试目标灵活组合:
- 用
@MockBean替换容器中某个 Bean(比如调第三方 API 的 FeignClient),不影响其他 Bean 加载 - 用
@SpyBean包裹真实 Bean,在保留原有逻辑基础上,对特定方法做 stub 或 verify 调用 - 未加注解但类型匹配的字段,Spring 仍会自动注入——建议显式写
@Autowired,更清晰可维护
确保测试依赖已正确引入
项目里必须有 spring-boot-starter-test,它已内置 JUnit 5、Spring Test、Mockito 和 AssertJ:
- Maven 中只需声明一个 test 依赖,无需单独引
junit-jupiter或spring-test - 如需排除 JUnit 4 兼容支持,可在 dependency 中添加
<exclusions></exclusions>过滤junit-vintage-engine - 该 starter 还自带
@Transactional、@Sql等实用测试支持
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










