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.
6.6 KiB
6.6 KiB
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% |
🚀 运行测试
后端测试
# 运行所有测试
./run-tests.sh
# 运行特定模块测试
mvn test -Dtest="*PostServiceTest"
# 生成覆盖率报告
mvn test jacoco:report
前端测试
# 运行所有测试
npm run test
# 运行特定测试
npm run test -- forum.test.ts
# 生成覆盖率报告
npm run test:coverage
📝 测试最佳实践
测试命名规范
- 测试类:
{ClassName}Test
- 测试方法:
test{MethodName}_{Scenario}
- 示例:
testCreatePost_Success
、testCreatePost_UserNotFound
测试结构
使用 AAA 模式:
- Arrange - 准备测试数据和环境
- Act - 执行被测试的方法
- Assert - 验证结果
Mock 使用原则
- 只Mock外部依赖
- 避免Mock被测试类的内部方法
- 使用合适的Mock策略(严格vs宽松)
测试数据管理
- 使用Builder模式创建测试数据
- 避免测试间的数据依赖
- 保持测试数据的简洁性
🔍 持续集成
CI/CD流程
- 代码提交触发测试
- 并行运行单元测试和集成测试
- 生成测试报告和覆盖率报告
- 测试失败时阻止部署
测试报告
- 自动生成HTML格式测试报告
- 覆盖率报告可视化
- 失败测试详细信息
- 历史趋势分析
📋 总结
本测试设计方案为UniLife项目提供了全面的质量保障:
- 全面覆盖: 涵盖所有核心业务逻辑
- 边界测试: 包含各种异常情况和边界条件
- 权限验证: 确保安全性要求
- 性能考虑: 验证关键操作的性能表现
- 易于维护: 结构清晰,便于后续维护和扩展
通过执行这套测试方案,可以确保UniLife项目的稳定性、可靠性和安全性。