用途:在 Elixir 项目中编写属性测试(Property-Based Testing),适合需要覆盖大量输入组合或复杂边界条件的场景。核心思路是定义始终成立的性质(如不变量、长度、顺序、元素保留、幂等性),而非断言具体输入输出。
主要能力:使用 StreamData 定义自定义生成器,用 ExUnitProperties 的 property/check all 编写测试。内置生成器支持 one_of、gen all 组合、list_of 与 map_of(可设 min_length)等;可构造有效邮箱、User 结构体等自定义生成器。失败时 StreamData 自动收缩(shrinking),报告最小失败用例,便于定位真实缺陷。
使用方式:在 mix.exs 中加入测试依赖 {:stream_data, "~> 1.0", only: :test};测试模块同时 use ExUnit.Case 与 use ExUnitProperties;用 property 与 check all 定义不变量,必要时约束生成器(如 min_length: 1、integer(1..100))以限定有效输入域;运行 mix test test/my_test.exs,读取原始失败输入与收缩后的最小用例,据此完善生成器或修复实现,再重跑验证。
限制与注意:不要断言精确输出,应断言恒成立的不变量;避免生成破坏被测代码的无约束输入,需约束取值范围;先看收缩结果;check all 必须配合使用 ExUnitProperties;一个属性只聚焦一个不变量;生成器应有界以免用例过大或运行缓慢。该技能的前置为 testing-essentials,后续暂无。具体安装命令、网址等信息请以原始资料为准。