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

Применяете ли вы мок-объекты при написании автоматических тестов?

Компании, где спрашивали
ООО Корпорация ЗНАК

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

sobes.tech AI

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

Да, мок-объекты применяются, когда нужно изолировать тестируемый код от внешних зависимостей: сети, базы данных, файловой системы, очередей или сторонних сервисов. Это помогает сделать тесты быстрее, стабильнее и предсказуемее. При этом важно не мокать всё подряд, чтобы не потерять смысл теста.

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

Мок-объект — это подменный объект, который имитирует поведение реальной зависимости в тесте. Обычно он позволяет задать ожидаемые входные данные, вернуть нужный результат и проверить, что зависимость была вызвана правильно. В Python для этого часто используют unittest.mock.

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

Допустим, есть функция, которая получает пользователя из внешнего API и сохраняет результат в систему. В тесте не хочется реально ходить в API, поэтому ответ API подменяют моком.

from unittest.mock import Mock

def get_user_name(api_client, user_id):
    user = api_client.fetch_user(user_id)
    return user["name"]

def test_get_user_name():
    api_client = Mock()
    api_client.fetch_user.return_value = {"name": "Alice"}

    result = get_user_name(api_client, 42)

    assert result == "Alice"
    api_client.fetch_user.assert_called_once_with(42)

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

  • Mock() создаёт поддельный объект вместо реального клиента API.
  • return_value задаёт, что вернёт метод fetch_user при вызове.
  • Вызов get_user_name(api_client, 42) работает с мок-объектом так, как будто это настоящий клиент.
  • assert result == "Alice" проверяет логику функции.
  • assert_called_once_with(42) проверяет, что зависимость была вызвана ровно один раз и с правильным аргументом.

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

  • Моки полезны для изоляции кода от внешних систем.
  • Они делают тесты быстрыми и детерминированными.
  • Хорошо подходят для проверки вызовов, аргументов и сценариев ошибок.
  • Не стоит мокать внутреннюю логику без необходимости — это делает тесты хрупкими.
  • Для простых зависимостей иногда лучше использовать реальные объекты или заглушки, а не мок.