Python mock 侧效应返回值
我正在尝试测试一些代码,这些代码会进行外部调用。我想要模拟这个调用。这个调用需要一些关键字参数,所以我在我的测试中写了一个小助手函数:
def mock_function(*args, **kwargs)
io_obj = StringIO()
for k,v in kwargs.iteritems():
io_obj.write("{}: {}\n".format(k, v)
print "\n{}".format(io_obj.getvalue()) # for testing purposes
return io_obj
在我的测试类的 setUp 函数中,我有这个:
@patch('function_to_test')
def setUp(self, mock_dude):
self.mock_client = mock_dude.return_value
self.mock_client.function_to_test.side_effect = mock_function
self.client = ClientClass()
在我的测试函数中,我调用了那个会调用外部函数的函数。我从 mock_function 得到了打印输出,所以我知道我模拟函数的方式是正确的。我的问题是:
我怎么才能获取在 mock_function 中创建的 io_obj?因为我的外部函数没有返回任何东西。
1 个回答
3
这个 Mock
对象其实会记录它被调用时传入的参数,所以你不需要自己写一个函数来做这个事情。你可以直接通过 Mock.call_args
来获取这些参数,或者使用 assert_called_with
来检查这个 mock 对象是否是用特定的参数被调用的。
示例:
>>> m = mock.Mock()
>>> m(1,2,3)
<Mock name='mock()' id='139905514719504'>
>>> m.call_args
call(1, 2, 3)
>>> m.assert_called_with(1,2,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib64/python2.6/site-packages/mock.py", line 835, in assert_called_with
raise AssertionError(msg)
AssertionError: Expected call: mock(1, 2, 4)
Actual call: mock(1, 2, 3)