python - Python模拟对象迭代器无法迭代多次
问题描述
我正在使用模拟迭代器功能返回用于单元测试的迭代器。在我正在测试的代码中,我多次循环遍历对象,但它似乎没有工作,只在第一次工作。
self.mock_scene.bpyscene.objects.__iter__ = mock.Mock(return_value=iter([mock_lamp_object, mock_lamp_object]))
解决方案
您可以使用side_effect
参数 ofMock
来覆盖__next__
您正在测试的类的属性。
根据文档:
如果
side_effect
是一个可迭代对象,那么对模拟的每次调用都将返回可迭代对象的下一个值。
例子:
from unittest.mock import Mock
class Iterable:
def __iter__(self):
return self
Iterable.__next__ = Mock(side_effect=[1, 2, 3])
for i in Iterable():
print(i)
这输出:
1
2
3
推荐阅读
- android - 使用 Firebase 身份验证的登录用户
- json - 展平任何嵌套的 json 字符串并使用 spark scala 转换为数据帧
- android - 如何编写 android espresso 测试脚本以在溢出菜单视图之外单击
- android - 无法以编程方式将样式应用于 Android Material Component Chip
- reactjs - Material-UI TextField - 在默认文本上呈现文本
- ruby-on-rails - Ruby Bug - POINTER ruby 2.5.3 p105 的分段错误
- node.js - 使用 Node JS 将 Oracle CLOB 划分为多个 JSON
- ios - Nativescript - iOS 构建失败,错误代码为 2
- ios - 在从服务器检索的文本之间显示图像 [SWIFT]
- html - 表单无效时禁用angularJs中的外部按钮