Выбор ответа Middle Тестирование и pytest спрашивают часто обновлено

Где делать patch

Вопрос

Модуль orders.py содержит from notify import send_email и вызывает send_email(...). Какой путь подменять в тесте place_order?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: orders.sendemail. from notify import sendemail копирует ссылку на функцию в пространство имён orders, и placeorder ищет имя именно там.

Варианты ответа

  1. notify.send_email
  2. send_email
  3. orders.send_emailправильный ответ
  4. unittest.mock.send_email

Разбор

from notify import send_email копирует ссылку на функцию в пространство имён orders, и place_order ищет имя именно там. Патч notify.send_email заменит атрибут модуля notify, но orders продолжит держать старую ссылку. Правило: патчить там, где имя ищут при вызове. Если бы orders делал import notify и вызывал notify.send_email, правильным был бы путь notify.send_email.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме