with one click
review-test
审查代码变更的测试覆盖情况、测试深度和测试质量时触发。用于 PR review、合并前检查、或定期测试健康度评估。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
审查代码变更的测试覆盖情况、测试深度和测试质量时触发。用于 PR review、合并前检查、或定期测试健康度评估。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
写入新模块文档、重构模块、或用户要求分析模块时触发。
Bug 修复或对接问题排查确认有效后,将经验记录到知识库。
修改 PMR 分配器、内存池配置、热路径容器、对象生命周期管理代码后触发。
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
新增或修改 enable_shared_from_this 类、co_spawn 调用、shared_ptr 捕获的 lambda、co_await 后的成员访问时触发。
新增或修改原子操作、异步定时器、无锁通道、跨线程状态同步、CAS 竞争相关代码时触发。
| name | review-test |
| description | 审查代码变更的测试覆盖情况、测试深度和测试质量时触发。用于 PR review、合并前检查、或定期测试健康度评估。 |
审查代码变更的测试覆盖情况、测试深度和测试质量时。用于 PR review、合并前检查、或定期测试健康度评估。
逐个检查变更涉及的每个函数/类/模块,判断测试是否存在:
变更项 → 对应测试文件 → 状态
func_a() 新增逻辑 → tests/ModuleA.cpp → ✅ 已覆盖
class_b 新增方法 → (无) → ❌ 缺失
config 字段新增 → tests/Config.cpp → ⚠️ 仅默认值,未测非法输入
handler 错误路径重构 → tests/Handler.cpp → ⚠️ 仅测 happy path
判定标准:
对每个已有测试,逐项检查以下维度:
MockTransport::set_read_error() — 读错误路径MockTransport::set_write_error() — 写错误路径close() 后操作) — eof 路径cancel() 后操作) — 取消路径co_await 恢复后状态一致性# 编译覆盖率版本
cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DPRISM_ENABLE_COVERAGE=ON
cmake --build build -j 16
ctest --test-dir build --output-on-failure -j 1
# 生成报告
gcovr --root . --filter "src/prism/" --exclude ".*_deps.*" --exclude ".*tests.*" \
--html-details build/coverage.html --print-summary
评估标准:
关注重点(非数字本身):
if (ec) / catch / fault::failed)runner.Check() / runner.LogPass() / runner.LogFail(),独立模式用匿名命名空间的 LogPass() / LogFail()Check(1 == 1, "always true"))ioc.run() 后所有协程是否自然退出(无挂起)written_data() 的验证是否检查了完整的协议响应TestHandshakeWithInvalidVersion)Test1、TestCase)1. 收集变更范围
git diff --name-only target_branch...HEAD
↓ 筛选 src/prism/ 下的变更文件
2. 识别变更内容
对每个变更文件,提取:新增/修改的函数、类、配置字段、错误处理分支
3. 查找对应测试
搜索 tests/ 目录中引用了变更模块的测试文件
4. 逐项评估
按"变更-测试映射"表逐行填写状态
5. 深度检查已有测试
对状态为 ✅ 和 ⚠️ 的测试,按"测试深度评估"清单检查
6. 生成审查报告
# 测试审查报告
## 变更范围
- 分支/commit: {ref}
- 变更文件: {count} 个
## 映射表
| 变更项 | 测试文件 | 状态 | 备注 |
|--------|----------|------|------|
| {item} | {test} | ✅/❌/⚠️ | {detail} |
## 覆盖率
- 行覆盖率: {X}%(变更文件)
- 分支覆盖率: {X}%(变更文件)
## 深度问题
1. {具体问题描述,附文件名和行号}
## 建议
- [ ] {必须修复 — ❌ 项}
- [ ] {建议补充 — ⚠️ 项}
- [ ] {可选优化}
## 结论
- 🟢 可合并 — 测试充分,无缺失
- 🟡 有风险 — 部分变更缺少测试,但非核心路径
- 🔴 需补充 — 核心变更缺少测试,必须补充后合并
// ❌ 调用了函数但不检查结果 — 即使函数返回错误也 LogPass
parse_request(input, req);
runner.LogPass("parse_request works");
修正:检查返回值和输出字段。
// ❌ Mock 了被测对象本身 — 测试的是 Mock 不是真实逻辑
auto transport = std::make_shared<MockTransport>();
transport->inject_read(expected_response); // 注入的是"期望的输出"
// 这测试的是 MockTransport 能注入数据,不是协议处理器的逻辑
修正:Mock 应只模拟依赖项(transport),不模拟被测对象本身。
// ❌ 只测 happy path
runner.Check(ec == fault::code::ok, "success");
// 缺少:
// - 输入截断时的行为
// - 格式错误时的行为
// - 连接中断时的行为
// ❌ ioc.run() 永远不返回 — 测试挂起
net::co_spawn(ioc, test_coro(), net::detached);
ioc.run(); // 如果 test_coro 永远不完成,这里永远阻塞
修正:协程必须有完成路径(设置 closed_、注入 eof、或使用定时器超时)。
相关 skill:
write-test提供了测试编写模板和 Mock API 速查 相关 skill:bench-perf提供了性能回归测试的编写方法 相关 skill:debug-cpp提供了测试失败时的排查流程