SuperAPI AI 工具集

property-based-testing

测试与质量

查看项目

更新于 10-15 23:49

技能介绍

用途:该技能提供基于属性测试(Property-Based Testing)的专家知识,通过自动生成测试用例验证代码应满足的属性,而非只测具体示例。适用于数学性质(交换律、结合律)、编解码往返、解析与序列化、数据转换、API 契约、不变量与约束等场景。不适用于编写具体示例单元测试、配置测试运行器、E2E 浏览器测试、测试质量分析或变异测试。

主要能力:核心概念包括生成器(自动创建多样输入)、收缩(将失败用例最小化到最简形式)、覆盖(探索人易遗漏的边界)。常见属性模式有往返 f(g(x))=x、幂等 f(f(x))=f(x)、交换律、结合律、单位元、逆运算。

TypeScript/JavaScript(fast-check):安装 bun add -d fast-check 或 npm install -D fast-check。用 fc.assert(fc.property(...)) 编写属性测试,常用生成器有 fc.integer()、fc.nat()、fc.string()、fc.array(arb)、fc.record({...})、fc.oneof(...) 等。配置项含 numRuns、seed、endOnFailure,可用 fc.pre 设置前置条件。

Python(Hypothesis):安装 uv add --dev hypothesis pytest,可选扩展 hypothesis[numpy]、hypothesis[django]。在 pyproject.toml 配置 max_examples、deadline 及 dev/ci 配置文件,并在 conftest.py 加载。用 @given、@example、@settings 装饰器,常用策略有 st.integers()、st.text()、st.lists(strat)、st.dictionaries(k,v)、st.builds(Class,...) 等,可用 assume 跳过无效输入。支持 RuleBasedStateMachine 状态测试。

CI 集成:GitHub Actions 中运行 pytest 并加 --hypothesis-show-statistics、--hypothesis-profile=ci、--hypothesis-seed,失败时上传 .hypothesis/ 数据库。

限制:资料未提供具体收费、平台支持范围或效果保证;详细示例与高级模式需查阅 REFERENCE.md。