gpt4 book ai didi

python - 使用 Mock 时删除 call()

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:47 25 4
gpt4 key购买 nike

在 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 返回给我的列表没有这个“调用”的东西,我能够做我想做的事,但由于某种原因,“调用”开始出现,我没有不知道如何正确处理。

最佳答案

你可以这样做:

>>> import mock
>>> my_call = mock.call('test', example=3)
>>> name, args, kwargs = my_call
>>> name
''
>>> args
('test',)
>>> kwargs
{'example': 3}

这将为您提供调用的名称(并非总是可用)、位置参数和关键字参数。根据the documentationcall_args_list 中的 call() 对象实际上是具有两个值的元组,而不是三个。所以你可以这样做:

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

关于python - 使用 Mock 时删除 call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976473/

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