jqwik - 如何选择测试值?

jqwik - How are values for tests selected?

在 jkwik 站点的第一个示例中,有一个生成器可能会为 "divisible by 3" 生成大量值:

@Property
boolean every_third_element_starts_with_Fizz(@ForAll("divisibleBy3") int i) {
    return fizzBuzz().get(i - 1).startsWith("Fizz");
}

@Provide
Arbitrary<Integer> divisibleBy3() {
    return Arbitraries.integers().between(1, 100).filter(i -> i % 3 == 0);
}

jqwik 运行 属性 会测试所有可能的值,还是 select 来自这个列表的值?如果是第二种情况,怎么办select?

在这种情况下,jqwik 将生成所有可能的值,因为只有 100 个候选值需要考虑,而 100 小于生成值的默认数量,即 1000。由于还进行了过滤,因此只有 33 个数字正在生成可被 3 整除的 100 以下。

如果无法完全覆盖某个值的可能范围,则选择值

  1. 来自一组典型的边缘情况,例如最小值 (1) 和最大值 (100)
  2. (伪)从所有值的集合中随机抽取。随机分布 数字被扭曲以使较低的数字更有可能被选中。