Тестирование с pytest

Первые тесты на pytest: нормальные сценарии, граничные случаи и исключения

Содержание курса

Нормальные сценарии и граничные случаи

Когда синтаксис теста уже понятен, следующий вопрос важнее: какие входные данные брать для проверки.

Нормальный сценарий — это спокойный рабочий пример. Такой, который похож на реальное использование функции и не пытается сломать её специально. Для скидки это обычная цена и обычный процент:

from prices import apply_discount

def test_apply_discount_regular_percent() -> None:
    assert apply_discount(2000, 10) == 1800

Такой тест отвечает на вопрос: «функция вообще делает основную работу?» Но одного нормального сценария мало. Ошибки часто живут не в середине диапазона, а на краях.

Граничный случай — это значение около перехода в другое поведение. Для чисел это часто ноль, единица, максимум, минимум. Для коллекций — пустой список и список из одного элемента. Для строк — пустая строка, строка из одного символа, строка с пробелами.

В функции скидки края видны сразу: скидка 0% должна оставить цену как есть, а скидка 100% должна обнулить цену.

from prices import apply_discount

def test_apply_discount_zero_percent_keeps_price() -> None:
    assert apply_discount(2000, 0) == 2000

def test_apply_discount_full_percent_makes_price_zero() -> None:
    assert apply_discount(2000, 100) == 0

Эти тесты не проверяют «ещё два случайных числа». Они фиксируют важные точки поведения. Если в коде появится ошибка вроде неправильного знака, неверного округления или лишнего условия, крайние значения часто покажут это быстрее, чем ещё один пример с 10% или 15%.

Хороший первый набор обычно состоит из одного типичного случая и нескольких краёв. Не нужно сразу покрывать все возможные числа. Достаточно выбрать значения, про которые есть отдельный смысловой вопрос: что происходит при нуле, при одном элементе, на максимуме, на пустом вводе.

Первые тесты на pytest: нормальные сценарии, граничные случаи и исключения — Python для продвинутых: ООП, типизация и тестирование — Latorn