Какой тип тестов использует mock-объекты для изоляции кода

«Какой тип тестов использует mock-объекты для изоляции кода» — вопрос из категории Тестирование, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тесты, в которых для изоляции тестируемого компонента используются mock-объекты (заглушки), называются модульными (unit-тестами).

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

Пример с unittest.mock в Python:

Предположим, есть функция, которая обращается к внешнему сервису для получения данных о погоде.

from unittest.mock import Mock

# Функция, которую мы тестируем
def get_weather_message(weather_api):
    temp = weather_api.get_temperature()
    if temp < 0:
        return "Очень холодно!"
    return "Погода в норме."

# Тест для этой функции
def test_cold_weather_message():
    # 1. Настройка (Arrange): создаем mock-объект API
    mock_api = Mock()
    # Задаем поведение: метод get_temperature() вернет -5
    mock_api.get_temperature.return_value = -5

    # 2. Действие (Act): вызываем функцию с mock-объектом
    message = get_weather_message(mock_api)

    # 3. Проверка (Assert): убеждаемся, что функция вернула правильное сообщение
    assert message == "Очень холодно!"
    # Проверяем, что метод mock-объекта был вызван
    mock_api.get_temperature.assert_called_once()

Ключевые преимущества:

  • Скорость: Выполняются очень быстро, так как не требуют реальных I/O операций.
  • Изоляция: Позволяют тестировать один компонент, не беспокоясь о работоспособности других.
  • Контроль: Дают полный контроль над поведением зависимостей (например, имитация ошибок API).