我正在编写一些单元测试并想使用 Mock。
鉴于以下代码:
# the 'real' query set is a Django database model
# qs = SomeDjangoModel.objects.filter(name='some_name')
qs = mock.Mock()
qs.filter.return_value = qs
item = mock.Mock()
item.do_work.return_value = "Some text"
qs.iter.return_value = iter([item])
# below is the code I want to test..
qs = qs.filter(name='some name')
qs = qs.filter(valid_from__lte=Timezone.now())
for obj in qs:
obj.do_work()
Run Code Online (Sandbox Code Playgroud)
跑步时,我得到
类型错误:“模拟”对象不可迭代
我试过打补丁
@mock.patch('__builtin__.iter')
Run Code Online (Sandbox Code Playgroud)
但我似乎无法让它发挥作用。我还没有成功弄清楚当查询集被 for 循环“使用”时真正发生了什么。
非常感谢帮助!
[在第一个解决方案建议之后编辑了进一步添加的示例代码]