小编use*_*726的帖子

如何模拟查询集以在 python/Mock 中的 for 循环中使用

我正在编写一些单元测试并想使用 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 循环“使用”时真正发生了什么。

非常感谢帮助!

[在第一个解决方案建议之后编辑了进一步添加的示例代码]

python django unit-testing mocking

7
推荐指数
1
解决办法
5153
查看次数

标签 统计

django ×1

mocking ×1

python ×1

unit-testing ×1