45 行
1.3 KiB
Markdown
45 行
1.3 KiB
Markdown
# 测试与 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/容器沙箱)。
|
||
|