testing•

Property-based тестування на практиці

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

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 на практиці».

Схожі матеріали

© 2026 StackPulse. Все права защищены.