# 测试规范
## 概述
本规范基于项目现有代码实现,定义了单元测试和集成测试的设计原则和标准。项目目前尚未编写测试代码,本规范为未来测试开发提供指导。
## 基本原则
1. **测试驱动开发**:优先编写测试代码,再实现业务逻辑。
2. **测试覆盖**:确保核心业务逻辑有足够的测试覆盖。
3. **独立性**:每个测试用例应独立运行,不依赖其他测试。
4. **可读性**:测试代码应清晰易懂,便于维护。
## 测试框架
- **单元测试**:使用JUnit 5作为测试框架。
- **集成测试**:使用Spring Boot Test进行集成测试。
- **Mock框架**:使用Mockito进行依赖注入的模拟。
### 当前项目情况
- 当前 `pom.xml` 中 **未** 包含常用的测试依赖(如 `spring-boot-starter-test`/`junit-jupiter`/`mockito`)。因此仓库内 `src/test/java` 目录目前为空。
- 建议在 `pom.xml` 中添加以下依赖以开启测试能力:
```xml
org.springframework.boot
spring-boot-starter-test
test
org.junit.jupiter
junit-jupiter
5.9.2
test
```
添加这些依赖后,建议在本地或 CI 中运行 `mvn test` 并生成 coverage 报告(如使用 JaCoCo)。
## 测试结构
1. **测试类命名**:测试类以被测类名 + "Test" 命名,例如 `UserServiceTest`。
2. **测试方法命名**:使用描述性名称,遵循 `should_When_Then` 或 `test_方法名_场景` 格式。
3. **测试文件位置**:测试文件放置在 `src/test/java` 目录下,与主代码保持相同的包结构。
## 单元测试规范
1. **测试范围**:主要测试Service层、Util类等业务逻辑。
2. **Mock依赖**:使用Mockito模拟外部依赖,如Mapper、外部服务。
3. **断言**:使用AssertJ或JUnit的断言方法进行结果验证。
## 集成测试规范
1. **测试范围**:测试Controller层、数据库操作等。
2. **测试环境**:使用@SpringBootTest注解启动完整应用上下文。
3. **数据库测试**:使用H2内存数据库或Testcontainers进行数据库测试。
## 测试数据
1. **测试数据准备**:在测试方法中使用@BeforeEach准备测试数据。
2. **数据清理**:在测试方法中使用@AfterEach清理测试数据。
3. **数据隔离**:确保测试数据不影响其他测试。
## 测试运行
1. **Maven命令**:使用 `mvn test` 运行所有测试。
2. **IDE集成**:在IDE中直接运行测试类或方法。
3. **CI/CD集成**:在构建过程中自动运行测试。
## 代码覆盖率
1. **覆盖率工具**:使用JaCoCo生成测试覆盖率报告。
2. **覆盖率目标**:核心业务代码覆盖率不低于80%。
3. **覆盖率检查**:在CI/CD中设置覆盖率阈值检查。
## 注意事项
- 测试代码应与生产代码一同维护。
- 避免在测试中使用硬编码的外部依赖。
- 定期review测试代码,确保其有效性。