Ответ
В контексте юнит-тестирования (unit testing), 'unit' (модуль) — это наименьшая логически обособленная и изолированная часть программного кода, которую можно протестировать.
Цель юнит-теста — проверить, что этот конкретный 'unit' работает корректно в изоляции от остальной системы. Внешние зависимости (например, обращения к базе данных, файловой системе или API) обычно заменяются заглушками (mocks, stubs).
В роли 'юнита' чаще всего выступают:
- Функция или метод
- Класс
- Иногда — небольшой модуль
Пример:
Допустим, у нас есть функция-юнит для расчета скидки:
# a_unit_of_code.py
def calculate_discount(price, discount_percent):
if not 0 <= discount_percent <= 100:
raise ValueError("Скидка должна быть в диапазоне от 0 до 100")
return price * (discount_percent / 100)
Юнит-тест для этой функции будет проверять её логику с разными входными данными:
# test_unit.py
import pytest
from a_unit_of_code import calculate_discount
def test_calculate_discount_positive():
"""Проверяет корректный расчет скидки."""
assert calculate_discount(100, 10) == 10.0
assert calculate_discount(200, 25) == 50.0
def test_calculate_discount_with_invalid_percent():
"""Проверяет вызов исключения при некорректном проценте."""
with pytest.raises(ValueError):
calculate_discount(100, 101)
Основные принципы:
- Изоляция: Тест не должен зависеть от внешних систем или других юнитов.
- Скорость: Юнит-тесты должны выполняться очень быстро, так как их запускают часто.
- Автоматизация: Запуск и проверка результатов должны быть полностью автоматическими.
Такой подход позволяет быстро находить и исправлять ошибки на ранних стадиях разработки.