# 测试与 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/容器沙箱)。