В чем смысл юнит-тестов?
Смысл юнит-тестов в том, чтобы проверять минимальные изолированные единицы кода (обычно функции или методы класса) на корректность работы.
Основные цели:
Ранняя проверка качества Ошибки ловятся сразу на этапе разработки, ещё до интеграции и сборки продукта.
Документация поведения кода Юнит-тесты сами по себе описывают, как должна работать функция — это своего рода «живой пример использования».
Поддержка рефакторинга Если код переписывается, тесты быстро покажут, что где-то нарушена логика. Это позволяет безопаснее вносить изменения.
Локализация ошибок Так как юнит-тесты проверяют отдельные части кода изолированно (обычно с помощью mock-объектов), легче понять, где именно ошибка.
Рост доверия к системе Когда большая часть бизнес-логики покрыта юнит-тестами, снижается вероятность, что «упадёт» что-то критичное при изменениях.
Скорость обратной связи Юнит-тесты выполняются быстро (секунды), в отличие от UI-тестов.
Допустим, у нас есть функция для расчёта процентов по вкладу:
# bank.py
def calculate_interest(amount, rate, years):
if amount < 0 or rate < 0 or years < 0:
raise ValueError("Параметры должны быть неотрицательными")
return amount * (1 + rate / 100) ** years
Тесты на pytest:
# test_bank.py
import pytest
from bank import calculate_interest
def test_simple_case():
assert calculate_interest(1000, 10, 1) == 1100
def test_multiple_years():
assert calculate_interest(1000, 10, 2) == pytest.approx(1210, rel=1e-3)
def test_zero_rate():
assert calculate_interest(1000, 0, 5) == 1000
def test_invalid_input():
with pytest.raises(ValueError):
calculate_interest(-1000, 10, 1)
Запуск тестов:
pytest -v
Хочешь, я ещё покажу, как параметризовать тесты в pytest
, чтобы не дублировать однотипные проверки?
Что проверяют тесты:
корректность результата при разных входных данных,
работу при нулевой ставке,
обработку некорректных входных значений.
Last updated
Was this helpful?