用途:该资料是一份属性测试风格指南,介绍 John Hughes 与 Koen Claessen 于 1999 年提出 QuickCheck 的思路——不写单个测试用例,而是描述对所有合法输入都应成立的性质,由框架随机生成输入并尝试找出反例。
主要能力:涵盖属性测试的核心循环(定义性质、随机生成输入、检查性质、收缩到最小反例、报告最小反例),并归纳常见性质类型,包括往返/逆性质(如 encode/decode、serialize/deserialize)、不变量(如排序后长度不变、有序)、幂等性(如 sort(sort(xs)) == sort(xs))、等价/对照(新旧实现结果一致)以及代数性质(结合律、单位元、函子律)。资料还给出 Python 风格的生成器、收缩器与 QuickCheck 引擎示例代码,以及自定义生成器(如 User 对象)的写法。
使用方式:资料建议为纯函数定义清晰不变量,优先测试往返性质,使用收缩获得最小失败用例,在 CI 中设置随机种子以保证可复现,并运行大量迭代(至少 100 次,推荐 1000 次以上)。示例代码展示了 for_all、_shrink、property_test 装饰器等用法。
适用场景:适用于具有明确不变量或代数律的纯函数、编解码与序列化、数据结构实现、新旧实现对照等。
限制:资料明确不建议对有副作用且未隔离的代码使用属性测试,不应跳过收缩,不应忽视不稳定的性质,也不应把性质写成变相的例子;同时提醒仍需显式测试边界情况,且通过 100 次测试并不等于正确。具体安装命令、支持语言与平台信息暂未提供。