看起来传递给forAll
方法的 Shrink 实例在搜索较小的反例时没有使用生成器。如果您将您的财产更改为:
property("Test") = Prop.forAllNoShrink(Gen.choose(1, 10)) (n => n >= 0 && n < 10)
然后它应该正确地失败:
[info] ! Algorithm.Test: Falsified after 7 passed tests.
[info] > ARG_0: 10
[error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, Skipped 0
可视化收缩值的一种方法是使用以下Prop.collect
方法:
property("Test") = Prop.forAll(Gen.choose(1, 10)) { n =>
Prop.collect(n) { n >= 0 && n < 10 }
}
然后收集的值如下所示:
[info] ! Algorithm.Test: Falsified after 40 passed tests.
[info] > ARG_0: -1
[info] > Collected test data:
[info] 17% 3
[info] 17% 1
[info] 15% 6
[info] 12% 9
[info] 10% 2
[info] 10% 5
[info] 7% 4
[info] 7% 8
[info] 2% -1
[info] 2% 7
在哪里可以看到在收缩过程中使用了 -1。