feat: rebuild CSP practice workflow, UX and automation

这个提交包含在:
Codex CLI
2026-02-13 15:49:05 +08:00
父节点 d33deed4c5
当前提交 e2ab522b78
修改 105 个文件,包含 15669 行新增428 行删除

44
docs/测试与TDD.md 普通文件
查看文件

@@ -0,0 +1,44 @@
# 测试与 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/容器沙箱)。