Почему мой макет Python работает только с определенным способом импорта?Python

Программы на Python
Anonymous
Почему мой макет Python работает только с определенным способом импорта?

Сообщение Anonymous »


У меня есть класс utils, который, помимо прочего, имеет функцию для получения идентификатора:

# utils.py защита get_id(): возвращаться ... Кроме того, есть еще один класс, скажем, автомобилей, который использует эту функцию:

# car.py из утилит импортировать get_id класс автомобиля: ... настройка защиты (самостоятельная): self.id = get_id() Я хочу запустить модульный тест, который должен предоставить конкретный идентификатор, поэтому я высмеиваю эту функцию:

# test_car.py импортировать модульный тест из unittest.Mock import Mock импортировать утилиты класс TestCar(unittest.TestCase): ... защита test_car_setup (сам): utils.get_id = Mock(callable, return_value="my-testing-id") автомобиль = Автомобиль() автомобиль.setup() ... Но этот макет не работает. Я все еще получаю поведение исходной функции. Однако мне удалось заставить его работать, изменив класс автомобиля следующим образом:

# car.py от . импортировать утилиты класс автомобиля: ... настройка защиты (самостоятельная): self.id = utils.get_id() Теперь возникает вопрос: почему эта версия работает, а предыдущая версия — нет? Сначала я думал, что это может быть проблема с вызовом по ссылке/вызовом по значению, но отладчик показал, что независимо от того, как я настраиваю импорт, функция utils всегда является одним и тем же объектом.

Я понимаю, что это может быть нетипичный вопрос, поскольку мой проект работает, но я не понимаю, как работает Python, который к этому приводит, и был бы признателен, если бы кто-нибудь мог меня просветить.

Заранее спасибо!

Вернуться в «Python»