Property-based тестування на практиці
Перевіряємо властивості програми на тисячах згенерованих вхідних даних замість ручних прикладів.

Property-based тестування на практиці
Від прикладів до властивостей
Звичайний unit-тест перевіряє функцію на кількох вручну підібраних прикладах. Property-based тестування заходить з іншого боку: замість конкретних вхідних даних описується загальна властивість, яка повинна виконуватися для будь-яких допустимих входів, а бібліотека (наприклад, Hypothesis для Python чи fast-check для JavaScript) сама генерує сотні й тисячі випадкових тестових випадків, намагаючись її спростувати. Детальніше про суміжний підхід можна прочитати в матеріалі «Contract-тестування мікросервісів».

Приклад на практиці
from hypothesis import given, strategies as st
@given(st.lists(st.integers()))
def test_sort_is_idempotent(lst):
once = sorted(lst)
twice = sorted(once)
assert once == twice
Тут ми не перераховуємо конкретні списки, а описуємо властивість: повторне сортування вже відсортованого списку не змінює його. Бібліотека сама підбере порожні списки, списки з повторами, від'ємними числами та іншими граничними випадками, які легко упустити вручну.
Особливо цінна частина таких бібліотек — автоматичне скорочення (shrinking) знайденого контрприкладу до мінімального відтворюваного випадку, що сильно спрощує налагодження порівняно з випадковим списком із тисячі елементів. Ці ідеї перегукуються з темами «Тестування продуктивності: інструменти та метрики» та «CSS Container Queries на практиці».
Схожі матеріали
Автоматизація smoke-тестів після деплою
Практичний розбір теми «автоматизація smoke-тестів після деплою»: підходи, інструменти та типові помилки.
Behavior-Driven Development і Gherkin
Практичний розбір теми «behavior-Driven Development і Gherkin»: підходи, інструменти та типові помилки.
Chaos-тестування відмовостійкості
Практичний розбір теми «chaos-тестування відмовостійкості»: підходи, інструменти та типові помилки.