Модуль unittest.mock позволяет проводить unit-тестирование в изоляции, заменяя реальные объекты — такие как базы данных, API или файловые системы — контролируемыми подделками, обеспечивая быстрые, надёжные и независимые от внешних систем тесты.
Mock — создаёт гибкий поддельный объект, который автоматически записывает вызовы, аргументы и возвращаемые значения, позволяя тебе проверить, как твой код с ним взаимодействовалMagicMock — расширяет Mock встроенной поддержкой магических методов Python (например, __len__, __str__)patch — временно заменяет реальный объект в конкретном пространстве имён во время теста, а затем автоматически восстанавливает егоfrom unittest.mock import Mock, patch
# Прямое использование Mock
service = Mock()
service.get_data.return_value = {"key": "value"}
# Использование patch в качестве декоратора
@patch("mymodule.requests.get")
def test_api_call(mock_get):
mock_get.return_value.status_code = 200
result = mymodule.fetch()
mock_get.assert_called_once()
assert_called_with() и assert_called_once() подтверждают, что твой код ведёт себя правильноreturn_value и side_effect позволяют симулировать любой ответ, включая исключенияВсегда патчи накладывай там, где объект используется, а не там, где он определён. Например, используй patch("mymodule.requests.get") вместо patch("requests.get"), чтобы гарантировать замену правильной ссылки.
MagicMock отличается от Mock в основном тем, что обеспечивает автоматическую поддержку магических методов Python, таких как __len__ и __str__, тогда как Mock требует ручной конфигурации этих методов.
Новый — ещё не проверен сообществом
Вы