Что такое заглушка (mock/stub) и зачем она нужна в автоматизированном тестировании?

«Что такое заглушка (mock/stub) и зачем она нужна в автоматизированном тестировании?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Заглушка (Mock/Stub) — это тестовый двойник (test double), который заменяет реальную зависимость в изолируемом модуле. Она используется для контроля входных данных и поведения зависимостей.

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

  • Изоляция тестируемого модуля от внешних систем (БД, API, файловая система).
  • Эмуляция специфического поведения (возврат успешного ответа, ошибки, исключений).
  • Ускорение выполнения тестов за счёт исключения медленных операций.
  • Проверка взаимодействий (был ли метод вызван с нужными аргументами).

Пример использования unittest.mock в Python:

from unittest.mock import Mock

# 1. Создание заглушки для внешнего сервиса
payment_gateway_mock = Mock()

# 2. Настройка поведения: возврат успешного ответа
payment_gateway_mock.process_payment.return_value = {"status": "success", "transaction_id": "txn_123"}

# 3. Настройка поведения: эмуляция ошибки
payment_gateway_mock.process_payment.side_effect = ConnectionError("Service unavailable")

# 4. Использование заглушки в тесте
def test_successful_payment():
    order_service = OrderService(payment_gateway_mock)
    result = order_service.checkout(amount=100.0)

    # Проверка результата
    assert result.is_successful == True
    # Проверка взаимодействия: метод был вызван ровно 1 раз с нужным аргументом
    payment_gateway_mock.process_payment.assert_called_once_with(amount=100.0)

Использование заглушек делает тесты быстрыми, стабильными и сфокусированными на логике тестируемого кода.