Подмените класс в модуле, где его использует тестируемый код, а методы настройте у mock-экземпляра через return_value. autospec помогает проверять существование методов и сигнатуры.
Как бы ты замокал целый класс (например, класс Redis Provider с несколькими методами)?
Подмените класс в модуле, где его использует тестируемый код, а методы настройте у 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.