Sobes.tech
Назад к вопросам
Junior — Middle
52

Что представляют собой тесты, использующие моки, и как они называются?

Компании, где спрашивали
КубикТех

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Это тесты, в которых реальные зависимости заменяются заглушками или мок-объектами. Они нужны, чтобы проверять логику изолированно, без сети, базы данных и других внешних систем. Обычно такие тесты относят к unit tests, если проверяется одна единица поведения.

Определение:

Тесты с моками — это тесты, где вместо реальных объектов используются подмены: mock, stub, fake, spy. Моки позволяют контролировать входные данные, поведение зависимостей и проверять, как код взаимодействует с ними. Такой подход помогает делать тесты быстрыми, стабильными и независимыми от внешней среды.

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

Например, есть функция, которая отправляет уведомление через внешний сервис. В тесте не вызывают реальный API, а подставляют mock-объект и проверяют, что метод отправки был вызван с нужными параметрами.

from unittest.mock import Mock

def send_welcome(email_service, user_email):
    email_service.send(user_email, "Welcome!")

def test_send_welcome():
    email_service = Mock()
    send_welcome(email_service, "user@example.com")

    email_service.send.assert_called_once_with("user@example.com", "Welcome!")

Пояснение кода:

Код создаёт mock-объект email_service, который имитирует внешний сервис отправки писем. Затем функция send_welcome вызывается так же, как в обычном коде, но реальная отправка не происходит. После этого тест проверяет, что метод send был вызван ровно один раз и с нужными аргументами.

По шагам:

  1. Создаётся поддельная зависимость Mock().
  2. Тестируемая функция вызывается с этой поддельной зависимостью.
  3. Проверяется факт и параметры вызова метода у мока.
  4. Логика тестируется без обращения к внешней системе.

Ключевые моменты:

  • Такие тесты обычно называют unit tests, если они проверяют изолированную бизнес-логику.
  • Mock — это подменный объект для проверки взаимодействий.
  • Тесты с моками помогают убрать зависимость от сети, БД и других нестабильных сервисов.
  • Важно не злоупотреблять моками: слишком много моков делает тесты хрупкими и менее понятными.
  • Хороший тест с моками проверяет не реализацию, а ожидаемое поведение и взаимодействие с зависимостями.