jqwik - Как выбираются значения для тестов?
В первом примере на сайте jkwik есть генератор, который потенциально генерирует большое количество значений для "делится на 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 запускать проверку свойств для всех возможных значений или выбирает значения из этого списка? Если это второй случай, как он выбирается?
1 ответ
Решение
В этом случае jqwik сгенерирует все возможные значения, потому что есть только 100 кандидатов для рассмотрения, а 100 меньше, чем количество сгенерированных значений по умолчанию, которое равно 1000. Поскольку также выполняется фильтрация, только 33 числа ниже 100 являются делимыми. на 3 генерируются.
В случаях, когда возможный диапазон значений не может быть полностью покрыт, выбираются значения.
- из набора типичных крайних случаев, таких как минимум (1) и максимум (100)
- (псевдо) случайным образом из набора всех значений. Случайное распределение чисел искажено, чтобы дать меньшим числам больше шансов быть выбранным.