Как бы ты замокал целый класс (например, класс Redis Provider с несколькими методами)?

Подмените класс в модуле, где его использует тестируемый код, а методы настройте у mock-экземпляра через return_value. autospec помогает проверять существование методов и сигнатуры.

Короткий ответ

Что ответить на собеседовании

Подмените класс в модуле, где его использует тестируемый код, а методы настройте у mock-экземпляра через return_value. autospec помогает проверять существование методов и сигнатуры.

Подробный разбор

Ответ с пояснениями

Подмените класс в модуле, где его использует тестируемый код, а методы настройте у mock-экземпляра через return_value. autospec помогает проверять существование методов и сигнатуры.

from unittest.mock import patch

with patch('myapp.service.RedisProvider', autospec=True) as cls:
    provider = cls.return_value
    provider.get.return_value = 'cached'
    # Вызов тестируемого сценария здесь создаст этот экземпляр.

myapp.service — пример точки использования, его заменяют реальным модулем. Для асинхронных методов нужен await-совместимый mock. Проверяйте наблюдаемый результат и важные вызовы, а не внутренние детали без необходимости. Если зависимость передаётся в конструктор, часто проще передать fake-реализацию напрямую.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее