关于 test-review
用于审查测试套件、覆盖缺口和测试场景质量的技能,尤其关注编码设计不变量的测试。它侧重评估与改进规划,不用于编写或更新测试。
主要功能
- 01识别语言与测试框架
- 02盘点覆盖率与缺口
- 03评估测试场景质量
- 04检查编码不变量的测试
- 05规划测试改进
- 06核验有证据支持的发现
适用场景
- 01发布前审查测试套件
- 02调查测试失败和覆盖缺口
- 03检查测试是否保留设计不变量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ athola/ claude-night-market --skill test-review安装后在 Claude Code 中输入/test-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
modules/content-assertion-quality.mdcoverage-analysis.mdframework-detection.mdremediation-planning.mdscenario-quality.md详细介绍
测试审查工作流
以 TDD/BDD 的严谨性评估并改进测试套件。
快速开始
/test-review
**验证:**运行 pytest -v,确认测试通过。
适用场景
- 审查测试套件质量
- 分析覆盖率缺口
- 主要版本发布前
- 测试失败后
- 规划测试改进
不适用场景
- 编写新测试——使用 parseltongue:python-testing
- 更新现有测试——使用 sanctum:test-updates
必需的进度项
test-review:languages-detectedtest-review:coverage-inventoriedtest-review:scenario-qualitytest-review:invariant-preservationtest-review:gap-remediationtest-review:evidence-loggedtest-review:findings-verified
渐进式加载
根据审查深度按需加载模块:
- 基本审查:核心工作流(本文件)
- 框架检测:加载
modules/framework-detection.md - 覆盖率分析:加载
modules/coverage-analysis.md - 质量评估:加载
modules/scenario-quality.md - 补救规划:加载
modules/remediation-planning.md
工作流
步骤 1:检测语言(test-review:languages-detected)
识别测试框架和版本约束。
→ 参见:modules/framework-detection.md
快速检查:
find . -maxdepth 2 -name "Cargo.toml" -o -name "pyproject.toml" -o -name "package.json" -o -name "go.mod"
**验证:**使用 --help 标志运行该命令,确认命令可用。
步骤 2:盘点覆盖率(test-review:coverage-inventoried)
运行覆盖率工具并找出缺口。
→ 参见:modules/coverage-analysis.md
快速检查:
git diff --name-only | rg 'tests|spec|feature'
**验证:**运行 pytest -v,确认测试通过。
步骤 3:评估场景质量(test-review:scenario-quality)
使用 BDD 模式和断言检查评估测试质量。
→ 参见:modules/scenario-quality.md
重点关注:
- Given/When/Then 的清晰度
- 断言的具体程度
- 反模式(无效等待、模拟内部实现、重复样板代码)
步骤 4:规划补救措施(test-review:gap-remediation)
制定包含负责人和日期的具体改进计划。
→ 参见:modules/remediation-planning.md
步骤 5:记录证据(test-review:evidence-logged)
记录已执行的命令、输出和建议。
→ 参见:imbue:proof-of-work
测试质量检查清单(精简版)
- 测试结构清晰(Arrange-Act-Assert)
- 覆盖关键路径(身份验证、校验、错误)
- 断言具体且包含上下文
- 无不稳定测试(无效等待、顺序依赖)
- 使用可复用的固件/工厂函数
- 保留编码不变量的测试(见下文)
不变量编码测试
测试既验证行为,也编码设计不变量。 断言“模块 A 从不导入模块 B”的测试 编码了层级边界。断言“此函数是纯函数”的测试编码了并发 模型。这些测试至关重要,而覆盖率指标无法体现其作用。
评审期间,请检查:
-
不变量编码测试是否被删除或弱化? 用于约束架构边界、数据结构或 API 契约的测试,不应 在未明确说明将放弃哪个不变量、且未上报请人类判断的情况下被删除。
-
测试预期是否被修改,以迁就有缺陷的实现? 如果断言值发生变化,请问: 需求是否变了,还是 Agent 修改了 测试来让代码通过?后者是最危险的 测试篡改形式。
-
新的不变量是否被编码为测试? 做出设计 决策时(例如选择数据结构、模块边界、错误处理策略),应至少有 一个测试,其失败意味着该 不变量遭到违反。
危险信号模式:
| 模式 | 风险 |
|---|---|
在通过的测试中添加 @pytest.mark.skip | 不变量被悄然舍弃 |
| 将断言从具体改为宽泛 | 约束被放宽 |
| 重命名测试以描述新行为 | 旧不变量从历史记录中被抹去 |
| 因为“测试的是旧代码”而删除测试 | 不变量被移除,且未作替代 |
检测到不变量弱化时:
请勿批准。将其标记为阻塞性质量问题,并向人类提出以下三个选项:
- 保留:还原测试更改,修复实现以满足该不变量
- 分层:保留不变量测试,并在其旁边添加新行为(即使不够优雅也接受)
- 修订:该不变量确实有误;删除旧测试,并编写新测试来编码 替代不变量
这是模型经常判断错误的事项。当没有人类可供咨询时, 默认选择选项 1(保留)。
输出格式
## Summary
[Brief assessment]
## Framework Detection
- Languages: [list] | Frameworks: [list] | Versions: [constraints]
## Coverage Analysis
- Overall: X% | Critical: X% | Gaps: [list]
## Quality Issues
[Q1] [Issue] - Location - Anchor: `verbatim source text at file:line` - Fix
## Remediation Plan
1. [Action] - Owner - Date
## Recommendation
Approve / Approve with actions / Block
**验证:**运行带有 --help 标志的命令以验证其是否可用。
集成说明
- 使用
imbue:proof-of-work捕获可复现的证据 - 参考
imbue:diff-analysis评估风险 - 使用
imbue:structured-output模式格式化输出
验证发现有据可依(test-review:findings-verified)
将发现写入 .review/findings.json,运行引文验证器
(Skill(imbue:review-core) 第 5 步),并删除验证器拒绝的发现,或将其标记为 UNVERIFIED。
退出条件
- 已检测并记录框架
- 已分析覆盖率并识别缺口
- 已评估场景质量
- 已制定包含负责人和日期的补救计划
- 已记录带有引文的证据
- 每条已报告的发现都包含经
citation_verifier.py确认的Location+ 原文Anchor(退出码为0),或者未验证的发现已被删除或标记为UNVERIFIED
故障排除
常见问题
未发现测试
确保测试文件符合 test_*.py 或 *_test.py 模式。运行 pytest --collect-only 进行验证。
导入错误
检查被测试的模块是否位于 PYTHONPATH 中,或使用 pip install -e . 安装
异步测试失败
安装 pytest-asyncio,并使用 @pytest.mark.asyncio 装饰测试函数