К какому уровню тестирования относятся тесты с использованием моков?

«К какому уровню тестирования относятся тесты с использованием моков?» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тесты, использующие моки (заглушки), чаще всего относятся к модульному (юнит) тестированию.

Почему именно модульное тестирование? Цель модульного теста — проверить изолированно одну единицу кода (функцию, метод, класс). Моки используются для замены внешних зависимостей (баз данных, API, файловой системы), чтобы:

  1. Изолировать тестируемый модуль.
  2. Контролировать поведение зависимостей (задавать ожидаемые возвращаемые значения или исключения).
  3. Ускорить выполнение тестов, убрав медленные операции.
  4. Упростить настройку сложных или нестабильных сценариев.

Пример (Python, pytest с unittest.mock):

from unittest.mock import Mock
import pytest

# Тестируемый сервис, который зависит от внешнего API
class PaymentService:
    def __init__(self, gateway):
        self.gateway = gateway
    def process_payment(self, amount):
        return self.gateway.charge(amount) == "success"

def test_payment_success():
    # Создаём мок платежного шлюза
    mock_gateway = Mock()
    mock_gateway.charge.return_value = "success"

    service = PaymentService(mock_gateway)
    result = service.process_payment(100)

    assert result is True
    # Проверяем, что метод charge был вызван с правильным аргументом
    mock_gateway.charge.assert_called_once_with(100)

Моки также могут применяться в интеграционных тестах для изоляции части системы, но их основная «обитель» — это именно модульные тесты.