В чем смысл юнит-тестов?

Смысл юнит-тестов в том, чтобы проверять минимальные изолированные единицы кода (обычно функции или методы класса) на корректность работы.

Основные цели:

  1. Ранняя проверка качества Ошибки ловятся сразу на этапе разработки, ещё до интеграции и сборки продукта.

  2. Документация поведения кода Юнит-тесты сами по себе описывают, как должна работать функция — это своего рода «живой пример использования».

  3. Поддержка рефакторинга Если код переписывается, тесты быстро покажут, что где-то нарушена логика. Это позволяет безопаснее вносить изменения.

  4. Локализация ошибок Так как юнит-тесты проверяют отдельные части кода изолированно (обычно с помощью mock-объектов), легче понять, где именно ошибка.

  5. Рост доверия к системе Когда большая часть бизнес-логики покрыта юнит-тестами, снижается вероятность, что «упадёт» что-то критичное при изменениях.

  6. Скорость обратной связи Юнит-тесты выполняются быстро (секунды), в отличие от 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?