关于 writing-tests
用于设计和运行测试的技能,旨在证明所需行为并捕捉回归。它指导开发者了解项目工具、设计有区分力的测试用例,并核验测试结果。
主要功能
- 01了解项目测试工具
- 02将需求映射为测试用例
- 03按纵向切片构建测试
- 04优先使用真实对象与文件
- 05覆盖边界与失败路径
- 06核验测试结果与结论
适用场景
- 01为指定行为规划测试
- 02添加缺陷复现与回归测试
- 03审查断言较弱的测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ iliaal/ ai-skills --skill writing-tests安装后在 Claude Code 中输入/writing-tests确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
SPEC.mdreferences/anti-patterns-extended.mdfalse-pass-oracle-traps.mdgenerated-corpus-techniques.mdisolation-and-sandbox-traps.mdoracle-smells.mdrationalization-table.mdregression-proof.mdtest-completion.mdtest-design.mdtest-smells.md详细介绍
编写测试
编写测试,证明所请求的行为,并在该行为失效时失败。遵循用户设定的范围和仓库的实际约定;本技能不授权实现功能、执行外部操作或更改验收标准。
流程
- 编写测试前,先了解仓库的测试运行器、固定版本的包装器、配置、相邻测试和 CI 命令。了解针对性测试和完整测试套件的运行命令。使用项目工具,而非全局默认工具;保持已跟踪脚本可移植,并且仅在外层调用时使用个人包装器。
- 根据用户需求、已实现的行为以及交接时准备声明的内容设计测试用例。将每项验收标准对应到一个有区分力的用例,确保合理但错误的实现会导致测试失败。按可观察行为命名测试;每个测试只验证一种行为,并让测试夹具在待测维度上具有对抗性。
- 对于有可触达测试切入点的错误修复,先编写复现用例,观察到预期的失败,再应用最小修复并观察测试通过。如果无法触发实际问题,请遵循 test-completion.md 中关于缺失切入点的规则。对于新功能,按选定的测试策略分阶段实施:默认采用先实现后测试(先完成一个小的实现切片,再编写对应测试);如果明确选择测试优先,则先编写一个测试,再编写能使其通过的最小实现。逐个切片重复;先写完所有测试、再写完所有实现的横向切分是反模式,会导致测试验证凭空设想的行为。测试通过后再重构。绝不要为了让实现通过而修改规范、断言、测试夹具、快照或预期输出。
- 优先使用真实的内部对象、真实的临时文件和真实的测试数据库。只在最外层自有适配器处模拟外部边界;框架建议使用由框架维护的伪对象时,可以采用。模拟之前,先检查真实约定和副作用。
- 断言对使用者可见的结果,而非私有结构、模拟调用或框架行为。纳入相关的边界、无效输入、并发和失败场景。如果错误处理会捕获、记录、替换错误或回滚,请同时断言其可观察结果和错误是否可见。
- 通过唯一的运行标识构造禁止发生的违规情形,并观察对应的断言确实失败,以证明缺失或隔离类断言有效。评估前,确认控制变更确已生效且构建已完成。移除控制变更、还原产物,并确认测试通过。
- 编辑期间运行范围最小的检查,并在交接前运行适用的完整检查。检查通过和已执行的测试数量;空测试套件或被跳过的测试不能作为正面证据。
选择所需的细节
- 选择用例、夹具结构、模拟边界,或平衡单元/集成/E2E 测试时,请阅读 test-design.md。
- 编写 Bug 复现用例、变异控制,或断言某些事情绝不能发生时,请阅读 regression-proof.md。
- 审查生成的测试、更改快照、测试异步时序,或发现模拟对象取代实际行为时,请阅读 test-smells.md 以及 anti-patterns-extended.md 中适用的修复阶梯。要审计现有测试能否检测回归,请使用 ia-test-audit。
- 遇到薄弱的聚合断言、空洞断言、竞态复现,或可能无法触达测试对象的控制时,请阅读 oracle-smells.md。适用这些失败模式时,它会指向更详细的目录。
- 涉及容器状态、沙箱、超时、环境迁移,或进程/流隔离时,请阅读 isolation-and-sandbox-traps.md。
- 涉及封装器、过滤器、一致性预言机、跳过条件,或容易误导的绿色摘要时,请阅读 false-pass-oracle-traps.md。
- 当字节等价或生成的语料库是契约要求时,请阅读 generated-corpus-techniques.md;针对不同的值形状和嵌套结构,与独立实现进行比较。
- 陷入困境、考虑跳过测试,或准备移交测试工作时,请阅读 test-completion.md。在提出反对必要测试的理由前,请阅读 rationalization-table.md。
验证并报告
验证公开行为和边缘路径、测试之间的独立性、已审查的预期变更,以及每项声称的能力。设想移除一个守卫条件、翻转一个分支,或删除一个副作用,并确认测试能够检测到。优先选择足够快、可频繁运行的单元测试套件(用时不到 30 秒)。
报告测试覆盖的内容、实际结果、失败项和遗漏项。区分测试夹具与实际验证。遵循框架约定时,请使用适用的 PHP/Laravel 或 React/TypeScript 技能;此通用技能不能取代它们。
评论
支持 Markdown