Да, но тот факт, что это unittest.mock.patch
должен сказать вам кое-что о том, что это предназначено для использования:
import unittest.mock
with unittest.mock.patch('module.thing', replacement_thing):
do_whatever()
Если вы хотите, чтобы исправить несколько вещей в одном вызове вы можете использовать unittest.mock.patch.multiple
:
from unittest.mock import patch
with patch.multiple(module, thing1=replacement_thing, thing2=other_thing):
# module.thing1 and module.thing2 are now patched
do_whatever()
Просто убедитесь, что ни один из вещей, которые вы хотите, чтобы патч случится столкнуться с именами аргументов этой функции (target
, spec
, create
, spec_set
, autospec
, или new_callable
). Если они это сделают, вернитесь к обычным patch
.
Если вы хотите сделать это для целей не-модульного тестирования, вы можете захотеть пересмотреть свой дизайн.
Если вы находитесь на Python 2 и unittest.mock
нет в стандартной библиотеке, вы можете скачать backport из PyPI. Этот номер называется mock
, а не unittest.mock
.
Yikes ... Глобальное состояние, которое вы хотите изменить? Я сомневаюсь, что это существует, потому что это не похоже на то, что большинство людей захочет ... – mgilson