繁体   English   中英

python模拟副作用返回值

[英]python mock side-effect return value

我正在尝试测试一些进行外部调用的代码。 我想嘲笑那个呼唤。 该调用使用关键字args,因此我在测试中编写了这个小辅助函数:

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

在我的测试函数中,我正在调用调用外部函数的函数。 我从嘲笑函数获取打印输出,所以我知道我在正确嘲笑该函数。 我的问题是这样的:

我如何获得在模拟函数中创建的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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM