python UnitTest mock利用side_effect来" mock"关于多种功能

时间:2014-04-10 08:05:17

标签: python unit-testing mocking

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_volumecreate_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 :

来自UnitTest Python mock only one function multiple call

somefunction_mock.side_effect = [10, None, 10]

我不知道这是否可用于我的情况。

谢谢, prathamesh

0 个答案:

没有答案