Python模拟对象迭代器无法多次迭代
我使用模拟迭代器功能返回单元测试的迭代器。在我正在测试的代码中,我多次循环对象,但它似乎不起作用,只在第一次起作用Python模拟对象迭代器无法多次迭代,python,unit-testing,iterator,mocking,Python,Unit Testing,Iterator,Mocking,我使用模拟迭代器功能返回单元测试的迭代器。在我正在测试的代码中,我多次循环对象,但它似乎不起作用,只在第一次起作用 self.mock_scene.bpyscene.objects.__iter__ = mock.Mock(return_value=iter([mock_lamp_object, mock_lamp_object])) 我明白了。您只能在模拟迭代器中迭代一次,之后它将耗尽。要解决这个问题,请使用MagicMock及其迭代器,它可以被任意多次使用。您可以使用Mock的side\u
self.mock_scene.bpyscene.objects.__iter__ = mock.Mock(return_value=iter([mock_lamp_object, mock_lamp_object]))
我明白了。您只能在模拟迭代器中迭代一次,之后它将耗尽。要解决这个问题,请使用MagicMock及其迭代器,它可以被任意多次使用。您可以使用Mock的side\u effect参数来替代正在测试的类的u next\uu属性 根据报告: 如果side_effect是一个iterable,那么每个对mock的调用都将返回 iterable中的下一个值 例如:
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
任何符合条件的迭代器在迭代一次后都将耗尽。您需要停止每次重复使用相同的迭代器。