Ответ
Тесты, использующие моки (заглушки), чаще всего относятся к модульному (юнит) тестированию.
Почему именно модульное тестирование? Цель модульного теста — проверить изолированно одну единицу кода (функцию, метод, класс). Моки используются для замены внешних зависимостей (баз данных, API, файловой системы), чтобы:
- Изолировать тестируемый модуль.
- Контролировать поведение зависимостей (задавать ожидаемые возвращаемые значения или исключения).
- Ускорить выполнение тестов, убрав медленные операции.
- Упростить настройку сложных или нестабильных сценариев.
Пример (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)
Моки также могут применяться в интеграционных тестах для изоляции части системы, но их основная «обитель» — это именно модульные тесты.