目标
自定义解析器在深层嵌套或异常输入下崩溃,而单元测试从未生成这类输入。本配方用属性测试库对合法值断言序列化再解析后完全相等,对随机字符串断言遇到畸形输入会抛出受控错误而非导致进程崩溃;提醒收缩出的反例应固化为回归用例。
步骤要点
- 对随机合法值断言往返相等。
- 对随机字符串断言畸形输入抛受控错误。
- 把收缩出的反例固化为回归用例。
- 约束生成器到真实输入空间以发现有效 bug。
fc.assert(fc.property(fc.jsonValue(), (value) => {
expect(parse(serialize(value))).toEqual(value);
}));
排错提示
- 收缩结果可能难懂,需固化为用例。
- 生成器过宽会浪费时间。
- 属性测试是随机探索而非穷举。
适用边界
- 发现的缺陷需固化成回归。
- 属性过慢会拖长 CI。