code.py
def invoke_command():
...
return {'invoke': 'block'}
def attach_volume():
...
return {'path': dev_str}
def create_cloned_volume():
create_volume() # calls invoke_command
create_snapshot() # calls invoke_command
...
attach_volume()
test.py
mock_invoke = None
def fake_invoke_command():
return {'invoke': 'block'}
def fake_attach_volume():
return {'path': dev_str}
def test_create_cloned_volume(self):
self.mock_invoke.invoke_command = mock.Mock()
self.mock_invoke.side_effect = self.fake_invoke_command
self.mock_invoke.side_effect = self.fake_attach_command
self.handle.create_cloned_volume()
您好,
在我的code.py中,有create_cloned_volume
来调用create_volume, create_snapshot and attach_volume
。现在,create_volume
和create_snapshot
已调用invoke_command
我需要模拟。我能够成功地模仿这个。但是,如果我再次向attach_volume
提供side_effect,我需要模拟对fake_attach_volume
的调用失败。我无法弄清楚如何模拟对其他函数的第二次调用。请注意,invoke_command and attach_volume
内可能会有多次致电create_clone_volume
。我也看了
If you want to return a different value for each call, it's a perfect fit :
somefunction_mock.side_effect = [10, None, 10]
我不知道这是否可用于我的情况。
谢谢, prathamesh