← Назад к вопросам

Что такое unit-тесты?

1.3 Junior🔥 221 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Unit-тесты

Unit-тесты (модульные тесты) — это базовый уровень автоматизированного тестирования, который проверяет отдельные единицы кода в изоляции. Единицей обычно называют функцию, метод класса или небольшой модуль.

Назначение unit-тестов

Unit-тесты решают несколько критических задач:

  • Верификация корректности — убеждаются, что функция работает как предусмотрено
  • Регрессия — предотвращают повторное появление ошибок
  • Документация — служат живой документацией использования кода
  • Рефакторинг — дают уверенность при изменении кода
  • Быстрая обратная связь — выполняются за миллисекунды

Принципы unit-тестирования

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

Независимость — тесты не должны зависеть друг от друга. Порядок запуска не важен.

Покрытие — в идеале нужно стремиться к покрытию 80-90%, но не 100% (это оверхед).

Пример на Python с pytest

# Функция для тестирования
def calculate_discount(price: float, discount_percent: float) -> float:
    if not 0 <= discount_percent <= 100:
        raise ValueError("Discount must be between 0 and 100")
    return price * (1 - discount_percent / 100)

# Unit-тесты
import pytest

def test_calculate_discount_valid():
    """Тест корректного расчёта скидки"""
    assert calculate_discount(100, 20) == 80.0
    assert calculate_discount(50, 0) == 50.0

def test_calculate_discount_with_mocking():
    """Тест с mock-объектом"""
    from unittest.mock import Mock
    mock_logger = Mock()
    # Функция логирует операцию
    result = calculate_discount(100, 10)
    assert result == 90.0

def test_calculate_discount_invalid_input():
    """Тест обработки некорректного ввода"""
    with pytest.raises(ValueError, match="Discount must be between"):
        calculate_discount(100, 150)

Best practices

  1. Один тест — одна проверка (AAA: Arrange, Act, Assert)
  2. Понятные именаtest_function_does_something_under_condition
  3. Быстрые — unit-тесты должны выполняться за миллисекунды
  4. Зависимости через mock — не должны обращаться в реальные сервисы
  5. Setup/teardown — используй fixtures для подготовки данных

Unit-тесты — основа пирамиды тестирования и неотъемлемая часть профессиональной разработки.