2

在 python 2.6 或 2.7 中,我想在使用 Mock.call_args_list 时摆脱“调用”的东西。

我基本上想检查一些参数是否很好地调用了模拟。

我有类似的东西:

a = Mock()
...
self.assertEqual(a.call_args_list, ...)

但 call_args_list 看起来像:

[call(arg1, arg2, arg3), call(...)]

如何在不重新创建完整调用对象的情况下精确访问 arg2 值?

如果有办法迭代所有“调用”对象并获取所有参数的列表并提取我需要的任何内容?

问题是,以前我没有问题,call_args_list 返回给我的列表没有这个“调用”的东西,我能够做我想做的事,但由于某种原因,“调用”开始出现,我不知道怎么做正确处理它。

4

1 回答 1

2

你可以做:

>>> import mock
>>> my_call = mock.call('test', example=3)
>>> name, args, kwargs = my_call
>>> name
''
>>> args
('test',)
>>> kwargs
{'example': 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})]
于 2013-07-31T17:10:12.213 回答