1
我试图嘲笑方法extra_get()
的调用,它通常会返回一个字典列表。据我所知,从模拟docs,如果我想返回迭代,我应该设置side_effect参数。使unittest.mock.Mock()返回的字典列表
client.extra_get = mock.Mock(
**{'side_effect': [{'foo': 'bar'}]})
但然后将以下代码调用模拟的方法:
extra = client.extra_get(request, type_id)
result = {x.key: x.value for x in extra}
return result
而且因为extra
没有列表中的字典理解中失败,但字典{'foo': 'bar'}
。 我做错了什么?我怎样才能让模拟方法返回一个列表的字典?
['side_effect'(https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect)取一个列表,这样你就可以返回一个不同(*“如果side_effect是可迭代的,那么每次调用模拟将返回可迭代的下一个值”*)。可以使用['return_value'](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.return_value),每次只返回一件东西,或者提供一个词典列表清单。 – jonrsharpe
@jonrsharpe最初尝试过。但是如果我使用'client.extra_get.return_value = mock.Mock(** {'return_value':[{'foo':'bar'}]})'我得到了'TypeError:'Mock'对象不可迭代'错误。 – Paul
请给出一个[mcve]来证明那个问题。 – jonrsharpe