1
私はメソッドextra_get()
の呼び出しを模擬しようとしています。通常はdictsのリストを返します。私がモックdocsから理解できる限り、iterableを返す場合は、side_effect paramを設定する必要があります。unittest.mock.Mock()はdictsのリストを返します
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
はリストがないので、辞書のcomprehentionは失敗しますが、辞書{'foo': 'bar'}
。 私は間違っていますか?どのようにして、Mockメソッドがdictsのリストを返すようにすることができますか?
は[ 'side_effect'](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.side_effect)リストを取り、あなたは別のを返すことができます(* "side_effectがiterableの場合、モックへの各呼び出しはiterableからの次の値を返します" *)。 [return_value'](https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.return_value)を使用してください。毎回返されることが1つあります。辞書のリスト。 – jonrsharpe
@jonrsharpeが最初に試しました。しかし、もし私が 'client.extra_get.return_value = mock.Mock(** {'return_value':[{'foo': 'bar'}]}}を使っているなら' 'TypeError: 'Mock'オブジェクトは反復可能ではありません'エラー。 – Paul
その問題を示す[mcve]をください。 – jonrsharpe