在python 2.6或2.7中,我想在使用Mock.call_args_list时摆脱'调用'的东西。
我基本上想检查一些参数时是否调用了mock。
我有类似的东西:
a = Mock()
...
self.assertEqual(a.call_args_list, ...)
但是call_args_list看起来像:
[call(arg1, arg2, arg3), call(...)]
如何在不重新创建完整调用对象的情况下精确访问arg2值?
如果有办法迭代所有“调用”对象并得到所有参数的列表并只提取我需要的东西?
事情是,以前我没有问题,call_args_list返回我的列表没有这个“调用”的东西,我能够做我想做的事情,但由于某种原因,“呼叫”开始出现,我不'我知道如何正确处理它。
答案 0 :(得分:2)
你可以这样做:
>>> import mock
>>> my_call = mock.call('test', example=3)
>>> name, args, kwargs = my_call
>>> name
''
>>> args
('test',)
>>> kwargs
{'example': 3}
这将为您提供名称(并非始终可用),位置参数和调用的关键字参数。根据{{3}},call()
中的call_args_list
对象实际上是具有两个值的元组,而不是三个。所以你可以这样做:
>>> args, kwargs = my_call
您还可以使用索引获取值。例如,my_call[2]
将为您提供关键字参数。这可用于将call_args_list
转换为参数:
>>> call1 = mock.call('test', example=3)
>>> call2 = mock.call('test', example=4, value=5)
>>> call_args_list = [call1, call2]
>>> [(item[1], item[2]) for item in call_args_list]
[(('test',), {'example': 3}), (('test',), {'example': 4, 'value': 5})]