You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
unilife/UniLife单元测试设计文档.md

235 lines
6.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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项目的稳定性、可靠性和安全性。