gpt4 book ai didi

python模拟副作用返回值

转载 作者:行者123 更新时间:2023-11-28 21:04:58 24 4
gpt4 key购买 nike

我正在尝试测试一些进行外部调用的代码。我想 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

在我的测试类设置函数中,我有这个:

@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?我的外部函数不返回任何内容。

最佳答案

Mock 对象实际上捕获了调用时使用的参数,因此您无需编写自己的函数来执行此操作。您可以使用 Mock.call_args 直接访问参数, 或者断言模拟是使用 assert_called_with 以某些参数调用的.

例子:

>>> 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)

关于python模拟副作用返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24808983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com