mcpField
P
property-based-testing

property-based-testing

github.com/liaoann测试与质量042 次安装4 周前更新
代码仓库

关于 property-based-testing

一项通过生成输入寻找行为属性反例的测试技能。它帮助开发者判断何时适合属性测试,明确属性与判定依据,并将生成测试与示例测试结合。

主要功能

  1. 01明确属性与输入空间
  2. 02识别潜在反例类别
  3. 03选择可观察的判定依据
  4. 04生成基于领域的输入
  5. 05保留示例测试覆盖

适用场景

  1. 01验证往返转换不变量
  2. 02测试权限或状态规律
  3. 03在广泛输入中发现错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/liaoann/skills --skill property-based-testing

安装后在 Claude Code 中输入/property-based-testing确认已加载。

附带文件examples.mdoracles.md

详细介绍

基于属性的测试

使用生成的输入,搜索能够推翻那些应在多种输入下成立的行为的未知反例。

基于示例的测试用于确认已知场景。基于属性的测试则用于搜索能够推翻已声明属性的未知失败情况。

适用条件

在推荐或编写基于属性的测试之前,请先说明:

  1. 应成立的属性。
  2. 生成的输入或操作空间。
  3. 此测试可能发现的未知反例类别。
  4. 判定依据:测试如何知道行为有误。

如果缺少任何一项,请改用基于示例的测试。

不要仅仅因为代码涉及权限、状态机、解析器、序列化器、迁移或其他输入范围较广的领域,就调用此技能。只有能够明确指出具体属性时,这些领域才通常适合使用基于属性的测试:

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,查看良好和不良的属性示例。

通过公共行为实现

基于属性的测试应像基于示例的测试一样,通过相同的公共接口进行测试。在测试名称或断言消息中说明属性。根据领域概念构建生成器,而不是生成原始随机数据块。使用选定的预言机进行断言。如果测试框架需要,请配置确定性重放。

不要断言私有调用、内部代码分支或偶然的实现结构。

与基于示例的测试结合使用

基于属性的测试不能替代基于示例的测试。

对于典型业务场景、边界示例、真实缺陷的回归案例,以及错误消息和面向用户的输出,请使用基于示例的测试。对于手选示例覆盖范围过窄的广泛行为规律,请使用基于属性的测试。

完成标准

只有当测试设计说明了属性、生成的输入或操作空间、未知反例类别和预言机;生成器能够生成有意义的有效输入或有意构造的无效输入;失败能够提供可操作的反例,并能通过确定性种子或保存的反例复现;且基于示例的测试仍能覆盖典型场景、回归案例、确切消息和面向用户的细节时,此技能才算完成。

评论

支持 Markdown