Как гарантировать угловые случаи в тестировании на основе свойств

В последнее время я очень взволнован, когда читаю об идее тестирования на основе свойств.

Но у меня есть 1 вопрос, на который я до сих пор нигде не могу найти ответ:

Как тестирование на основе свойств может гарантировать, что оно будет каждый раз проверять крайние случаи?

Чтобы быть более конкретным, скажем, я использую ScalaCheck для проверки моей функции деления:

def divide(a: Int, b: Int): Int

Поскольку тестовые случаи будут генерироваться случайным образом, как я могу быть уверен, что ScalaCheck каждый раз будет проверять случай, где b = 0?


person Minh Thai    schedule 25.12.2017    source источник


Ответы (2)


Частные случаи часто являются собственными свойствами. Если вы попытаетесь написать один случай, охватывающий b = any integer, то все ваши свойства окажутся в одном большом и сложном тесте. Но вы можете разделить пространство параметров на несколько частей, например:

  • б = положительное целое число
  • б = отрицательное целое число
  • b = 0

И проверять их отдельно.

person Stanislav Bashkyrtsev    schedule 25.12.2017
comment
Ясно, так что ответ в угловых случаях не гарантируется, поэтому мы должны обрабатывать их отдельно. - person Minh Thai; 26.12.2017

Некоторые инструменты PBT всегда вводят угловые случаи перед созданием случайных.

Например, jqwik (для Java) попробует 0, 1, -1, Integer.MIN…VALUE и Integer.MAX…VALUE перед любыми случайными значениями.

person johanneslink    schedule 16.03.2018