我需要模拟一个函数和所有指向此函数的引用。
示例:
import mock
def do(msg):
print(msg)
def foo():
do('foo')
bar=foo
with mock.patch(__name__ + '.foo', lambda *args: do('mocked')):
foo()
bar()
输出是:
mocked
foo
但在我的情况下,我需要模拟真正的函数,而不仅仅是指向函数实现的名称。
背景:我想修补https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.PROTECT
如何在不使用" bar"。
的情况下获得所需的输出mocked
mocked
答案 0 :(得分:0)
您可以简单地模仿foo
而不是模仿do
。
with mock.patch(__name__ + '.do', lambda *args: print("mocked")):
foo()
bar()