文件
csp/docs/测试与TDD.md

45 行
1.3 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 测试与 TDD
## 1. 测试分层
后端采用 Catch2,按分层设计测试
1. **DB/迁移层**:表结构、索引、迁移兼容性
2. **Service 层**:题库、提交判题、错题本、竞赛、知识库业务逻辑
3. **Controller 层**:鉴权、参数解析、核心 HTTP 路径
## 2. 执行命令
```bash
cmake -S . -B build -G Ninja
cmake --build build
ctest --test-dir build -V
```
## 3. 现有测试覆盖
- `sqlite_db_test.cc`:迁移后核心表存在
- `auth_service_test.cc`:注册/登录/token 校验
- `auth_http_test.cc`Auth 接口
- `problem_service_test.cc`:题库查询
- `submission_service_test.cc`:提交评测 + 错题本流转
- `contest_service_test.cc`:竞赛排行榜逻辑
- `kb_service_test.cc`:知识库读取
- `problem_http_test.cc`:题库 HTTP
- `me_http_test.cc`:个人信息 + 错题本 HTTP
- `contest_http_test.cc`:竞赛 HTTP
- `submission_http_test.cc`:运行与提交 HTTP
## 4. TDD 落地流程建议
1. 先写失败测试(接口契约/业务规则)
2. 实现最小功能通过测试
3. 重构并保持测试全绿
4. 增加边界条件测试(无 token、参数错误、not found、竞赛状态校验
## 5. 注意事项
- 当前判题使用本机 `g++` + `timeout`,用于开发环境。
- 生产环境建议接入隔离沙箱(如 isolate/nsjail/容器沙箱)。