我正在使用模拟迭代器功能来返回用于单元测试的迭代器。在我正在测试的代码中,我多次遍历对象,但是它似乎不起作用,只能在第一次使用。
self.mock_scene.bpyscene.objects.__iter__ = mock.Mock(return_value=iter([mock_lamp_object, mock_lamp_object]))
答案 0 :(得分:0)
您可以使用side_effect
的{{1}}参数来覆盖您要测试的类的Mock
属性。
如果
__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 :(得分:-1)
弄清楚了。您只能通过模拟迭代器迭代一次,然后再用尽。要解决此问题,请使用MagicMock及其迭代器,您可以根据需要多次使用它。