В тестировании на основе примеров (например, в unit-тестировании) мы проверим работу функции на нескольких предопределенных значениях, допустим, 2 + 3 = 5, 10 + 20 = 30. Но такой подход не гарантирует, что функция правильно обработает все возможные входные данные, например, отрицательные или очень большие числа. В тестировании на основе свойств мы описываем общие правила, которые должна соблюдать функция. Например, сумма должна быть одинаковой независимо от порядка чисел (коммутативность), и результат не должен меняться при объединении групп чисел (ассоциативность). Эти правила проверяются на случайных данных, сгенерированных автоматически, что позволяет протестировать гораздо больше ситуаций и улучшить покрытие тестами.