|
|
# UniLife 单元测试设计文档
|
|
|
|
|
|
## 📋 概述
|
|
|
|
|
|
本文档详细描述了 UniLife 项目四个核心模块的单元测试设计方案:论坛模块、资源模块、课程表模块和用户模块。
|
|
|
|
|
|
## 🏗️ 测试架构
|
|
|
|
|
|
### 后端测试框架
|
|
|
- **JUnit 5**: 主要测试框架
|
|
|
- **Mockito**: Mock框架,用于模拟依赖
|
|
|
- **Spring Boot Test**: Spring Boot测试支持
|
|
|
- **H2 Database**: 内存数据库,用于测试
|
|
|
- **TestContainers**: 集成测试容器支持
|
|
|
|
|
|
### 前端测试框架
|
|
|
- **Vitest**: 现代化的Vue测试框架
|
|
|
- **Vue Test Utils**: Vue组件测试工具
|
|
|
- **jsdom**: DOM环境模拟
|
|
|
|
|
|
## 🎯 1. 论坛模块测试
|
|
|
|
|
|
### 1.1 后端测试
|
|
|
|
|
|
#### PostServiceTest
|
|
|
测试覆盖范围:
|
|
|
- ✅ **创建帖子成功** - 验证正常创建流程
|
|
|
- ❌ **用户不存在** - 验证用户验证逻辑
|
|
|
- ❌ **分类不存在** - 验证分类验证逻辑
|
|
|
- ❌ **标题为空** - 验证输入校验
|
|
|
- ✅ **获取帖子详情** - 验证详情获取和浏览量更新
|
|
|
- ❌ **帖子不存在** - 验证错误处理
|
|
|
- ✅ **获取帖子列表** - 验证分页和搜索
|
|
|
- ✅ **更新帖子** - 验证更新逻辑
|
|
|
- ❌ **无权限修改** - 验证权限控制
|
|
|
- ✅ **删除帖子** - 验证删除逻辑
|
|
|
- ✅ **点赞/取消点赞** - 验证点赞逻辑
|
|
|
|
|
|
#### PostControllerTest
|
|
|
测试覆盖范围:
|
|
|
- HTTP接口测试
|
|
|
- 权限验证
|
|
|
- 参数校验
|
|
|
- 响应格式验证
|
|
|
|
|
|
### 1.2 前端测试
|
|
|
|
|
|
#### forum.test.ts
|
|
|
测试覆盖范围:
|
|
|
- API调用正确性
|
|
|
- 参数传递验证
|
|
|
- 错误处理
|
|
|
- 响应数据解析
|
|
|
|
|
|
## 🗂️ 2. 资源模块测试
|
|
|
|
|
|
### 2.1 后端测试
|
|
|
|
|
|
#### ResourceServiceTest
|
|
|
测试覆盖范围:
|
|
|
- ✅ **文件上传成功** - 验证文件上传流程
|
|
|
- ❌ **用户不存在** - 验证用户验证
|
|
|
- ❌ **分类不存在** - 验证分类验证
|
|
|
- ❌ **空文件上传** - 验证文件校验
|
|
|
- ❌ **不支持的文件类型** - 验证文件类型限制
|
|
|
- ✅ **获取资源详情** - 验证详情获取
|
|
|
- ❌ **资源不存在** - 验证错误处理
|
|
|
- ✅ **获取资源列表** - 验证搜索和分页
|
|
|
- ✅ **更新资源信息** - 验证更新逻辑
|
|
|
- ❌ **无权限修改** - 验证权限控制
|
|
|
- ✅ **删除资源** - 验证删除逻辑
|
|
|
- ✅ **下载资源** - 验证下载逻辑和计数更新
|
|
|
- ✅ **点赞/取消点赞** - 验证点赞逻辑
|
|
|
|
|
|
### 2.2 前端测试
|
|
|
|
|
|
#### resources.test.ts
|
|
|
测试覆盖范围:
|
|
|
- 文件上传API测试
|
|
|
- 文件类型验证
|
|
|
- 下载权限测试
|
|
|
- 资源管理功能测试
|
|
|
|
|
|
## 📅 3. 课程表模块测试
|
|
|
|
|
|
### 3.1 后端测试
|
|
|
|
|
|
#### ScheduleServiceTest
|
|
|
测试覆盖范围:
|
|
|
- ✅ **创建日程成功** - 验证日程创建
|
|
|
- ❌ **用户不存在** - 验证用户验证
|
|
|
- ❌ **时间冲突** - 验证时间冲突检测
|
|
|
- ❌ **无效时间范围** - 验证时间校验
|
|
|
- ✅ **获取日程详情** - 验证详情获取
|
|
|
- ❌ **日程不存在** - 验证错误处理
|
|
|
- ❌ **无权限查看** - 验证权限控制
|
|
|
- ✅ **获取日程列表** - 验证列表获取
|
|
|
- ✅ **按时间范围获取** - 验证时间范围查询
|
|
|
- ✅ **更新日程** - 验证更新逻辑
|
|
|
- ❌ **无权限修改** - 验证权限控制
|
|
|
- ✅ **删除日程** - 验证删除逻辑
|
|
|
- ✅ **检查时间冲突** - 验证冲突检测算法
|
|
|
- ✅ **处理日程提醒** - 验证提醒逻辑
|
|
|
- ✅ **重复日程创建** - 验证重复日程逻辑
|
|
|
|
|
|
### 3.2 前端测试
|
|
|
|
|
|
#### schedule.test.ts
|
|
|
测试覆盖范围:
|
|
|
- 日程CRUD操作测试
|
|
|
- 时间冲突检测测试
|
|
|
- 重复日程测试
|
|
|
- 课程管理测试
|
|
|
|
|
|
## 👤 4. 用户模块测试
|
|
|
|
|
|
### 4.1 后端测试
|
|
|
|
|
|
#### UserServiceTest
|
|
|
测试覆盖范围:
|
|
|
- ✅ **用户注册成功** - 验证注册流程
|
|
|
- ❌ **用户名已存在** - 验证唯一性校验
|
|
|
- ❌ **邮箱已存在** - 验证邮箱唯一性
|
|
|
- ✅ **用户登录成功** - 验证登录流程和JWT生成
|
|
|
- ❌ **用户不存在** - 验证登录错误处理
|
|
|
- ❌ **密码错误** - 验证密码校验
|
|
|
- ❌ **账户被禁用** - 验证账户状态检查
|
|
|
- ✅ **获取用户信息** - 验证信息获取
|
|
|
- ❌ **用户不存在** - 验证错误处理
|
|
|
- ✅ **更新用户信息** - 验证信息更新
|
|
|
- ✅ **发送邮箱验证码** - 验证邮件发送
|
|
|
- ✅ **验证邮箱验证码** - 验证码校验
|
|
|
- ❌ **验证码过期** - 验证过期处理
|
|
|
- ❌ **验证码错误** - 验证错误处理
|
|
|
- ✅ **重置密码** - 验证密码重置
|
|
|
- ✅ **获取用户列表** - 验证管理功能
|
|
|
- ✅ **修改密码** - 验证密码修改
|
|
|
- ❌ **原密码错误** - 验证原密码校验
|
|
|
|
|
|
## 🔧 测试配置
|
|
|
|
|
|
### 测试环境配置
|
|
|
- **数据库**: H2内存数据库
|
|
|
- **Redis**: 测试专用实例
|
|
|
- **邮件**: Mock邮件服务
|
|
|
- **文件上传**: 临时目录
|
|
|
|
|
|
### 测试数据管理
|
|
|
- 使用 `TestDataBuilder` 统一创建测试数据
|
|
|
- 测试间数据隔离
|
|
|
- 自动清理测试数据
|
|
|
|
|
|
## 📊 测试覆盖率目标
|
|
|
|
|
|
| 模块 | 行覆盖率目标 | 分支覆盖率目标 |
|
|
|
|------|-------------|---------------|
|
|
|
| 论坛模块 | ≥ 85% | ≥ 80% |
|
|
|
| 资源模块 | ≥ 85% | ≥ 80% |
|
|
|
| 课程表模块 | ≥ 85% | ≥ 80% |
|
|
|
| 用户模块 | ≥ 90% | ≥ 85% |
|
|
|
|
|
|
## 🚀 运行测试
|
|
|
|
|
|
### 后端测试
|
|
|
```bash
|
|
|
# 运行所有测试
|
|
|
./run-tests.sh
|
|
|
|
|
|
# 运行特定模块测试
|
|
|
mvn test -Dtest="*PostServiceTest"
|
|
|
|
|
|
# 生成覆盖率报告
|
|
|
mvn test jacoco:report
|
|
|
```
|
|
|
|
|
|
### 前端测试
|
|
|
```bash
|
|
|
# 运行所有测试
|
|
|
npm run test
|
|
|
|
|
|
# 运行特定测试
|
|
|
npm run test -- forum.test.ts
|
|
|
|
|
|
# 生成覆盖率报告
|
|
|
npm run test:coverage
|
|
|
```
|
|
|
|
|
|
## 📝 测试最佳实践
|
|
|
|
|
|
### 测试命名规范
|
|
|
- 测试类:`{ClassName}Test`
|
|
|
- 测试方法:`test{MethodName}_{Scenario}`
|
|
|
- 示例:`testCreatePost_Success`、`testCreatePost_UserNotFound`
|
|
|
|
|
|
### 测试结构
|
|
|
使用 **AAA 模式**:
|
|
|
1. **Arrange** - 准备测试数据和环境
|
|
|
2. **Act** - 执行被测试的方法
|
|
|
3. **Assert** - 验证结果
|
|
|
|
|
|
### Mock 使用原则
|
|
|
- 只Mock外部依赖
|
|
|
- 避免Mock被测试类的内部方法
|
|
|
- 使用合适的Mock策略(严格vs宽松)
|
|
|
|
|
|
### 测试数据管理
|
|
|
- 使用Builder模式创建测试数据
|
|
|
- 避免测试间的数据依赖
|
|
|
- 保持测试数据的简洁性
|
|
|
|
|
|
## 🔍 持续集成
|
|
|
|
|
|
### CI/CD流程
|
|
|
1. 代码提交触发测试
|
|
|
2. 并行运行单元测试和集成测试
|
|
|
3. 生成测试报告和覆盖率报告
|
|
|
4. 测试失败时阻止部署
|
|
|
|
|
|
### 测试报告
|
|
|
- 自动生成HTML格式测试报告
|
|
|
- 覆盖率报告可视化
|
|
|
- 失败测试详细信息
|
|
|
- 历史趋势分析
|
|
|
|
|
|
## 📋 总结
|
|
|
|
|
|
本测试设计方案为UniLife项目提供了全面的质量保障:
|
|
|
|
|
|
1. **全面覆盖**: 涵盖所有核心业务逻辑
|
|
|
2. **边界测试**: 包含各种异常情况和边界条件
|
|
|
3. **权限验证**: 确保安全性要求
|
|
|
4. **性能考虑**: 验证关键操作的性能表现
|
|
|
5. **易于维护**: 结构清晰,便于后续维护和扩展
|
|
|
|
|
|
通过执行这套测试方案,可以确保UniLife项目的稳定性、可靠性和安全性。 |