con un clic
review-test
审查代码变更的测试覆盖情况、测试深度和测试质量时触发。用于 PR review、合并前检查、或定期测试健康度评估。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
审查代码变更的测试覆盖情况、测试深度和测试质量时触发。用于 PR review、合并前检查、或定期测试健康度评估。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
写入新模块文档、重构模块、或用户要求分析模块时触发。
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提供了测试失败时的排查流程