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

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