chore: remove TEST_CASES.md

This commit is contained in:
2026-04-29 02:08:49 +08:00
parent 9dc5e23693
commit dd632d53a0
-155
View File
@@ -1,155 +0,0 @@
# 个人理财系统 - 测试用例
> 本文档定义个人理财系统的测试用例,覆盖前后端各类型接口
---
## 1. 用户接口测试 (/api/users)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| USR-001 | 创建用户-正常 | POST | `{name: "张三", email: "zhangsan@example.com"}` | 创建成功,返回用户ID |
| USR-002 | 创建用户-缺少name | POST | `{email: "test@example.com"}` | 返回400,提示name为必填 |
| USR-003 | 创建用户-缺少email | POST | `{name: "李四"}` | 返回400,提示email为必填 |
| USR-004 | 创建用户-邮箱重复 | POST | `{name: "王五", email: "test@example.com"}` | 返回400,提示邮箱已被注册 |
| USR-005 | 获取用户列表 | GET | 无 | 返回所有用户数组 |
---
## 2. 账户接口测试 (/api/accounts)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| ACC-001 | 创建账户-正常 | POST | `{userId:1, name:"支付宝", type:"payment", balance:1000}` | 创建成功,返回账户ID |
| ACC-002 | 创建账户-缺少userId | POST | `{name:"微信", type:"payment"}` | 返回400,提示userId为必填 |
| ACC-003 | 创建账户-缺少必填字段 | POST | `{userId:1, name:"微信"}` | 返回400,提示type为必填 |
| ACC-004 | 创建账户-默认余额 | POST | `{userId:1, name:"现金", type:"cash"}` | 余额默认为0 |
| ACC-005 | 获取账户列表 | GET | `?userId=1` | 返回该用户所有账户 |
| ACC-006 | 获取单个账户 | GET | `/api/accounts/1` | 返回账户详情 |
| ACC-007 | 获取不存在的账户 | GET | `/api/accounts/999` | 返回404,账户不存在 |
| ACC-008 | 更新账户 | PUT | `/api/accounts/1` + `{name:"支付宝(已更新)", balance:2000}` | 更新成功 |
| ACC-009 | 删除账户 | DELETE | `/api/accounts/1` | 删除成功 |
---
## 3. 交易记录接口测试 (/api/records)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| REC-001 | 创建收入记录-正常 | POST | `{userId:1, accountId:1, type:"income", amount:5000, category:"工资", description:"月薪"}` | 创建成功,账户余额增加 |
| REC-002 | 创建支出记录-正常 | POST | `{userId:1, accountId:1, type:"expense", amount:100, category:"餐饮", description:"午饭"}` | 创建成功,账户余额减少 |
| REC-003 | 创建记录-缺少必填字段 | POST | `{userId:1, amount:100}` | 返回400,提示必填字段缺失 |
| REC-004 | 创建记录-金额为0 | POST | `{userId:1, accountId:1, type:"expense", amount:0, category:"餐饮"}` | 返回400,金额必须大于0 |
| REC-005 | 创建记录-金额为负 | POST | `{userId:1, accountId:1, type:"expense", amount:-100, category:"餐饮"}` | 返回400,金额必须大于0 |
| REC-006 | 创建记录-日期格式YYYY-MM-DD | POST | `{userId:1, accountId:1, type:"income", amount:100, category:"奖金", date:"2026-04-25"}` | 日期按本地时区正确解析 |
| REC-007 | 创建记录-日期包含时间 | POST | `{userId:1, accountId:1, type:"income", amount:100, category:"奖金", date:"2026-04-25T10:30:00"}` | 日期正确解析 |
| REC-008 | 获取记录列表-按用户 | GET | `?userId=1` | 返回该用户所有记录,按时间倒序 |
| REC-009 | 获取记录列表-按账户 | GET | `?userId=1&accountId=1` | 返回该账户所有记录 |
| REC-010 | 获取记录列表-按类型 | GET | `?userId=1&type=expense` | 返回所有支出记录 |
| REC-011 | 获取记录列表-按分类 | GET | `?userId=1&category=餐饮` | 返回餐饮分类记录 |
| REC-012 | 获取记录列表-日期范围 | GET | `?userId=1&startDate=2026-04-01&endDate=2026-04-30` | 返回日期范围内的记录 |
| REC-013 | 更新记录-修改金额 | PUT | `/api/records/1` + `{amount:200}` | 记录更新,余额正确调整 |
| REC-014 | 更新记录-修改类型 | PUT | `/api/records/1` + `{type:"expense"}` | 类型更新,余额正确调整 |
| REC-015 | 删除记录 | DELETE | `/api/records/1` | 删除成功,账户余额恢复 |
| REC-016 | 删除不存在的记录 | DELETE | `/api/records/999` | 返回404 |
---
## 4. 预算接口测试 (/api/budgets)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| BUD-001 | 创建预算-正常 | POST | `{userId:1, category:"餐饮", amount:1500, month:"2026-04"}` | 创建成功,返回预算ID |
| BUD-002 | 创建预算-缺少必填字段 | POST | `{userId:1, category:"餐饮"}` | 返回400,提示必填字段缺失 |
| BUD-003 | 创建预算-缺少月份 | POST | `{userId:1, category:"餐饮", amount:1000}` | 返回400,提示month为必填 |
| BUD-004 | 创建预算-同分类同月份 | POST | `{userId:1, category:"餐饮", amount:2000, month:"2026-04"}` | 可创建(未做唯一约束) |
| BUD-005 | 获取预算列表-按用户 | GET | `?userId=1` | 返回该用户所有预算 |
| BUD-006 | 获取预算列表-按月份 | GET | `?userId=1&month=2026-04` | 返回该月份预算 |
| BUD-007 | 获取单个预算 | GET | `/api/budgets/1` | 返回预算详情 |
| BUD-008 | 更新预算 | PUT | `/api/budgets/1` + `{amount:2000}` | 更新成功 |
| BUD-009 | 删除预算 | DELETE | `/api/budgets/1` | 删除成功 |
---
## 5. 统计接口测试 (/api/statistics)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| STA-001 | 月度统计-正常 | GET | `?userId=1&month=2026-04` | 返回totalIncome、totalExpense、categoryStats |
| STA-002 | 月度统计-缺少userId | GET | `?month=2026-04` | 返回400,提示userId为必填 |
| STA-003 | 月度统计-缺少month | GET | `?userId=1` | 返回400,提示month为必填 |
| STA-004 | 月度统计-无数据月份 | GET | `?userId=1&month=2025-01` | 返回0统计 |
| STA-005 | 月度统计-支出分类聚合 | GET | `?userId=1&month=2026-04` | categoryStats正确聚合各分类支出 |
| STA-006 | 趋势统计-正常 | GET | `?userId=1` | 返回按日期聚合的每日收支数组 |
| STA-007 | 趋势统计-按日期范围 | GET | `?userId=1&startDate=2026-04-01&endDate=2026-04-30` | 返回日期范围内的趋势 |
| STA-008 | 趋势统计-缺少userId | GET | 无userId参数 | 返回400 |
---
## 6. 仪表盘接口测试 (/api/dashboard)
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| DASH-001 | 仪表盘汇总-正常 | GET | `?userId=1` | 返回totalBalance、monthIncome、monthExpense、budgetUsage |
| DASH-002 | 仪表盘汇总-缺少userId | GET | 无userId | 返回400 |
| DASH-003 | 仪表盘汇总-无账户用户 | GET | `?userId=999` | 返回空账户、零值统计 |
| DASH-004 | 仪表盘汇总-预算使用率 | GET | `?userId=1` | budgetUsage包含percentage字段 |
| DASH-005 | 仪表盘汇总-跨月份计算 | GET | `?userId=1` | 仅计算当月数据 |
---
## 7. 健康检查与系统接口
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| SYS-001 | 健康检查 | GET | `/health` | 返回200success:true |
| SYS-002 | API信息 | GET | `/api` | 返回版本号信息 |
| SYS-003 | 初始化测试数据-首次 | GET | `/api/init-test-data` | 创建完整的测试数据 |
| SYS-004 | 初始化测试数据-已有数据 | GET | `/api/init-test-data` | 返回已有数据提示,无需重复初始化 |
---
## 8. 边界值与异常测试
| 编号 | 测试用例 | 请求方式 | 测试数据 | 预期结果 |
|------|---------|---------|---------|---------|
| EDGE-001 | 账户余额-超大金额 | POST | `{userId:1, accountId:1, type:"income", amount:999999999, category:"工资"}` | 支持大金额 |
| EDGE-002 | 记录描述-特殊字符 | POST | `{userId:1, accountId:1, type:"expense", amount:10, category:"餐饮", description:"咖啡&蛋糕"}` | 正确保存 |
| EDGE-003 | 记录描述-中文 | POST | `{userId:1, accountId:1, type:"expense", amount:50, category:"餐饮", description:"重庆小面"}` | 正确保存中文 |
| EDGE-004 | 日期边界-月初 | POST | `{..., date:"2026-04-01"}` | 正确解析 |
| EDGE-005 | 日期边界-月末 | POST | `{..., date:"2026-04-30"}` | 正确解析 |
| EDGE-006 | 并发创建记录 | POST x10 | 相同账户连续创建10笔 | 余额正确累加/扣除 |
| EDGE-007 | 账户余额-精度 | POST | `{userId:1, accountId:1, type:"income", amount:0.01, category:"其他"}` | 支持分精度 |
---
## 9. 前后端集成测试
| 编号 | 测试场景 | 测试步骤 | 预期结果 |
|------|---------|---------|---------|
| INT-001 | 创建账单完整流程 | 1.创建账户 → 2.创建收入 → 3.创建支出 → 4.查看仪表盘 | 仪表盘数据与操作一致 |
| INT-002 | 更新后数据一致性 | 1.创建记录 → 2.更新金额 → 3.检查账户余额 | 余额正确反映更新 |
| INT-003 | 删除后数据一致性 | 1.创建记录 → 2.删除记录 → 3.检查账户余额 | 余额恢复到原始值 |
| INT-004 | 预算超额提醒 | 1.创建预算100 → 2.创建支出200 → 3.查看仪表盘budgetUsage | percentage显示100以上 |
| INT-005 | 统计准确性 | 1.创建多种类型记录 → 2.查看月度统计 → 3.验证分类聚合 | 统计结果与实际一致 |
---
## 10. 自动化测试命令
```bash
# 启动后端服务
cd personal-finance-budget-system/backend
npm run dev
# 运行 API 测试
node test-api.js
# 运行单元测试(需配置)
npm test
```
---
**文档版本**: v1.0.0
**更新日期**: 2026-04-26