测试指南
引用文件
目录
简介
本测试指南面向 yudao-cloud 项目的开发者与测试工程师,系统性阐述单元测试、集成测试、API 测试、性能与压力测试、测试数据准备、测试环境搭建以及在持续集成中执行测试的完整流程。文档基于仓库现有测试基础设施与配置,结合 JUnit 5、Mockito(通过测试基类与工具类体现)、Spring Boot Test、内存数据库与 Redis、SQL 初始化、随机数据生成等能力,帮助团队建立高质量、可维护的测试体系。
项目结构
yudao-cloud 采用多模块聚合工程,测试相关能力集中在 yudao-framework/yudao-spring-boot-starter-test 模块,提供通用的测试基类与配置,覆盖内存数据库与 Redis 的单元测试基座,并在各业务模块中以 application-unit-test.yaml 提供测试环境配置。
图表来源
- pom.xml
- BaseDbUnitTest.java
- BaseDbAndRedisUnitTest.java
- RedisTestConfiguration.java
- SqlInitializationTestConfiguration.java
- application-unit-test.yaml
章节来源
核心组件
- 测试基类与注解
- BaseDbUnitTest:基于内存数据库的单元测试基类,导入数据库与 MyBatis 配置,激活 unit-test 环境,测试后自动清理。
- BaseDbAndRedisUnitTest:在 BaseDbUnitTest 基础上增加内存 Redis 支持,适合涉及缓存交互的测试。
- 测试配置
- RedisTestConfiguration:启动内嵌 RedisServer,便于无外部 Redis 的本地测试。
- SqlInitializationTestConfiguration:在延迟初始化场景下仍能正确执行 SQL 初始化。
- 测试工具
- RandomUtils:提供随机字符串、ID、日期、枚举状态、手机号、邮箱、URL 以及基于 Podam 的 POJO 随机构造,简化测试数据准备。
- 示例测试
- EncryptionTests:展示如何使用 JUnit 5 编写加密/签名相关功能的测试用例。
章节来源
- BaseDbUnitTest.java
- BaseDbAndRedisUnitTest.java
- RedisTestConfiguration.java
- SqlInitializationTestConfiguration.java
- RandomUtils.java
- EncryptionTests.java
架构总览
下图展示了测试执行的关键路径:测试类继承测试基类 → 启动内存数据库与 Redis(如需)→ 执行 SQL 初始化 → 运行测试 → 清理数据。
图表来源
- BaseDbUnitTest.java
- BaseDbAndRedisUnitTest.java
- RedisTestConfiguration.java
- SqlInitializationTestConfiguration.java
详细组件分析
单元测试基类与注解使用
- BaseDbUnitTest
- 作用:提供仅数据库的单元测试环境,适合 Service/Mapper 层测试。
- 关键点:@ActiveProfiles("unit-test")、@Sql 清理、导入数据库与 MyBatis 配置。
- BaseDbAndRedisUnitTest
- 作用:在数据库基础上增加内存 Redis,适合涉及缓存的场景。
- 关键点:导入 Redis 配置类与自动装配。
图表来源
章节来源
测试配置与环境
- application-unit-test.yaml
- 各业务模块的测试环境配置文件,用于切换到 unit-test 环境,加载内存数据库与 Redis。
- datasource.yaml
- 生产/开发环境的数据源配置,测试阶段通常由内存数据库替代。
章节来源
测试工具:随机数据生成
- RandomUtils
- 功能:随机字符串、ID、日期、布尔、集合、POJO 等,支持自定义消费者回调。
- 价值:大幅减少测试数据准备成本,提高用例可读性与可 维护性。
图表来源
章节来源
示例:加密/签名测试(JUnit 5)
- EncryptionTests
- 展示如何使用 @Test 编写签名、验签、加解密等测试用例。
- 建议:对边界条件(超时、错误密钥、非法输入)分别编写用例,确保健壮性。
章节来源
集成测试策略
- Spring Boot Test 注解
- @SpringBootTest:加载应用上下文,WebEnvironment 可选 NONE 或 MOCK。
- @ActiveProfiles("unit-test"):切换到测试环境配置。
- @Sql:在测试前后执行 SQL(如清理)。
- 测试数据库与事务
- 内存数据库:通过导入数据库自动配置与 SQL 初始化配置,实现快速、隔离的测试。
- 事务回滚:可在测试方法上使用 @Transactional 并在测试后回滚,保证数据一致性。
- Redis 集成
- 通过 RedisTestConfiguration 启动内嵌 Redis,满足缓存相关集成测试需求。
章节来源
- BaseDbUnitTest.java
- BaseDbAndRedisUnitTest.java
- RedisTestConfiguration.java
- SqlInitializationTestConfiguration.java
API 测试指南(概念性)
- REST Assured 使用建议
- 选择:在需要真实 HTTP 层验证的场景引入 REST Assured。
- 场景:接口幂等性、鉴权、分页、排序、错误码、响应格式校验。
- 建议:将公共断言封装为工具方法,统一响应体结构校验。
- 接口测试用例设计
- 正常用例:正常参数、边界值、典型业务流程。
- 异常用例:缺失参数、非法参数、权限不足、服务异常、网络抖动。
- 响应验证
- 状态码、响应头、JSON Schema 校验、字段存在性与类型检查。
(本节为概念性指导,不直接分析具体源码)