关于 property-based-testing
一项通过生成输入寻找行为属性反例的测试技能。它帮助开发者判断何时适合属性测试,明确属性与判定依据,并将生成测试与示例测试结合。
主要功能
- 01明确属性与输入空间
- 02识别潜在反例类别
- 03选择可观察的判定依据
- 04生成基于领域的输入
- 05保留示例测试覆盖
适用场景
- 01验证往返转换不变量
- 02测试权限或状态规律
- 03在广泛输入中发现错误
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ liaoann/ skills --skill property-based-testing安装后在 Claude Code 中输入/property-based-testing确认已加载。
附带文件examples.mdoracles.md
详细介绍
基于属性的测试
使用生成的输入,搜索能够推翻那些应在多种输入下成立的行为的未知反例。
基于示例的测试用于确认已知场景。基于属性的测试则用于搜索能够推翻已声明属性的未知失败情况。
适用条件
在推荐或编写基于属性的测试之前,请先说明:
- 应成立的属性。
- 生成的输入或操作空间。
- 此测试可能发现的未知反例类别。
- 判定依据:测试如何知道行为有误。
如果缺少任何一项,请改用基于示例的测试。
不要仅仅因为代码涉及权限、状态机、解析器、序列化器、迁移或其他输入范围较广的领域,就调用此技能。只有能够明确指出具体属性时,这些领域才通常适合使用基于属性的测试:
WRONG: This touches permissions, so use property-based testing.
RIGHT: For all resources and actions, a narrower role must not allow more than a broader role.
设计属性
属性必须描述外部可观察的行为或领域不变量。
良好的属性形式:往返、幂等性、交换性、守恒性、单调性、子集或权限规律、预言机比较、状态不变量、模型比较。
不良属性会照搬实现、断言私有调用,或只是重述代码的控制流。
请参阅 oracles.md,了解预言机类型、生成器指导和反例实践。请参阅 examples.md,查看良好和不良的属性示例。
通过公共行为实现
基于属性的测试应像基于示例的测试一样,通过相同的公共接口进行测试。在测试名称或断言消息中说明属性。根据领域概念构建生成器,而不是生成原始随机数据块。使用选定的预言机进行断言。如果测试框架需要,请配置确定性重放。
不要断言私有调用、内部代码分支或偶然的实现结构。
与基于示例的测试结合使用
基于属性的测试不能替代基于示例的测试。
对于典型业务场景、边界示例、真实缺陷的回归案例,以及错误消息和面向用户的输出,请使用基于示例的测试。对于手选示例覆盖范围过窄的广泛行为规律,请使用基于属性的测试。
完成标准
只有当测试设计说明了属性、生成的输入或操作空间、未知反例类别和预言机;生成器能够生成有意义的有效输入或有意构造的无效输入;失败能够提供可操作的反例,并能通过确定性种子或保存的反例复现;且基于示例的测试仍能覆盖典型场景、回归案例、确切消息和面向用户的细节时,此技能才算完成。