有没有办法推迟评估Mock side_effect。
def mockfunc(wheel):
wheel.rubber = soft
wheel.make = Mock(side_effect=mockfunc(wheel)))
这里的问题是我试图更换'wheel.make'方法,当它在测试中被调用时,调用mockfunc并设置其中一个wheel属性而不是运行常用方法。
事情是 - 当我设置side_effect时,立即发生mockfunc调用,橡胶属性设置为soft。在调用方法wheel.make之前,我不希望这种情况发生。
答案 0 :(得分:0)
根据side_effect
documentation,它应该是可调用的,可迭代的或异常的(类或对象)。此外,我想您要替换make
类中的未绑定方法wheel
:要进行这些修补,您应该使用patch
or patch.object
作为描述的上下文或装饰器{{3 }}
以下是如何操作的完整示例:
from mock import patch
class Wheel():
def __init__(self):
self.rubber = 0
def make(self):
self.rubber = 10
soft = 36
def mockfunc(wheel):
wheel.rubber = soft
wheel = Wheel()
print("unpatched wheel before make rubber = {}".format(wheel.rubber))
wheel.make()
print("unpatched wheel after make rubber = {}".format(wheel.rubber))
with patch.object(Wheel, "make", side_effect=mockfunc, autospec=True):
print("patched wheel before make rubber = {}".format(wheel.rubber))
wheel.make()
print("patched wheel after make rubber = {}".format(wheel.rubber))
输出
unpatched wheel before make rubber = 0
unpatched wheel after make rubber = 10
patched wheel before make rubber = 10
patched wheel after make rubber = 36