unittest.mock: в myservice.py есть from mymodule import api_client; тест с patch("mymodule.api_client") зелёный, но реальный HTTP-запрос всё равно уходит. В чём ошибка и чем `patch.object` отличается от строкового `patch`?
Pythonmediummiddle
Проверяет знание Python и pandas для анализа данных.
pythonmocktestingunittest
Варианты ответа
patch("mymodule.api_client") применяется лениво при первом обращении — сервис успевает сделать запрос раньше; нужно передать eager-аргумент autospec=True
Дело в кеше импортов: после patch надо перезагрузить myservice через importlib.reload, и тогда оба варианта патча работают полностью одинаково
Патчить надо там, где имя ИСПОЛЬЗУЕТСЯ: patch("myservice.api_client"); строковый patch подменяет символ в модуле по пути, patch.object — атрибут конкретного объекта
Строковый patch умеет подменять только функции верхнего уровня модуля — для импортированных объектов нужен patch.object, иначе подмена молча игнорируется
Как разобрать этот вопрос на собеседовании
Подумай, какая структура данных и какой инструмент pandas решают задачу с наименьшей сложностью: векторизация вместо циклов, groupby/merge вместо ручных склеек, корректная работа с NaN и типами. Интервьюер смотрит на читаемость кода и на то, понимаешь ли ты, что происходит «под капотом» — копия или вью, сложность операции, утечки памяти на больших данных.
На собеседовании по такому вопросу важно не только назвать ответ, но и кратко объяснить, почему он верный.
Тема вопроса — «Python». Чтобы подготовиться к похожим задачам, отрабатывай их на практике: python-тренажёр помогает довести навык до автоматизма, а раздел вопросов — увидеть формулировки, которые реально встречаются на интервью аналитика данных.
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
3000+ вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.