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