模拟函数,以及对此函数的引用

时间:2014-08-27 09:36:32

标签: python django unit-testing mocking

我需要模拟一个函数和所有指向此函数的引用。

示例:

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

1 个答案:

答案 0 :(得分:0)

您可以简单地模仿foo而不是模仿do

with mock.patch(__name__ + '.do', lambda *args: print("mocked")):
    foo()
    bar()