f# - 如何防止基于模型的测试中的收缩?
问题描述
这是 FsCheck 中基于模型的测试的示例:
let spec =
let inc = { new Command<Counter, int>() with
override __.RunActual counter = counter.Inc(); counter
override __.RunModel m = m + 1
override __.Post(counter, m) = counter.Get = m |@ sprintf "model: %i <> %A" m counter
override __.ToString() = "inc" }
let dec = { new Command<Counter, int>() with
override __.RunActual counter = counter.Dec(); counter
override __.RunModel m = m - 1
override __.Post(counter, m) = counter.Get = m |@ sprintf "model: %i <> %A" m counter
override __.ToString() = "dec" }
{ new ICommandGenerator<Counter,int> with
member __.InitialActual = Counter()
member __.InitialModel = 0
member __.Next model = Gen.elements [inc;dec] }
如何禁用此测试的命令收缩?
解决方案
如果您想阻止 FsCheck 缩小使用的命令数量(请参阅我上面的问题),您可以将规范转换为禁用缩小的属性:
let property =
let generator = Command.generate spec
let shrinker _ = Seq.empty // disable
Command.toPropertyWith spec generator shrinker
Check.Quick(property)
这允许 FsCheck 生成比所需更长的命令序列。例如[inc; inc; dec; inc; inc; dec; dec; dec]
。
推荐阅读
- oracle - 与最接近的匹配交叉应用
- c++ - 何时使用空白 cin.get()?
- c++ - 如何typedef模板函数指针?
- raspberry-pi - Raspberry Pi 脚本在启动后不启动
- java - 带有时尚 MNIST 数据集的 TensorFlow 模型
- laravel - 如何通过分页获取 Laravel Eloquent 中的特定列?
- tensorflow - tensorflow.python.framework.errors_impl.InvalidArgumentError:不兼容的形状:[1568] vs. [32,49]
- networking - 如何查找手机与连接的wifi路由器的距离?
- python - 如果由函数导入,则使用 `exec` 导入的模块不可用
- python - Pandas 数据类型转换 - 如何区分逗号和空格 -