当使用patch.object
来模拟方法时,有没有办法指定对于某些参数值,该方法将运行,因为它根本没有被模拟,并将返回“真正的”return_value,以及其他参数值来设置特定的return_value?
感谢。
答案 0 :(得分:0)
这是一个解决方案(从我使用过的地方进行了修改),效果相当不错。它涉及将补丁的side_effect
设置为函数。
import os.path
from unittest import mock
def different_return_values(dct):
def f(*args):
return dct[args]
return f
with mock.patch.object(
os.path,
'exists',
side_effect=different_return_values({
# The "generic" version above makes the arguments in order
# the keys to this map, you could write a specialized version
# which has a single argument or *whatever* key combination you
# like
('myfile',): True,
('wat',): 'not a real return value but hey, monkeypatch!',
('otherfile',): False,
}),
):
print(os.path.exists('myfile'))
print(os.path.exists('wat'))
print(os.path.exists('otherfile'))
OUTPUT = """\
True
not a real return value but hey, monkeypatch!
False
"""
这里的内容是,您可以提供正在修补的功能的更智能实现side_effect
:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect