Python Mock对象迭代器无法多次迭代

时间:2019-08-29 22:06:49

标签: python unit-testing iterator mocking

我正在使用模拟迭代器功能来返回用于单元测试的迭代器。在我正在测试的代码中,我多次遍历对象,但是它似乎不起作用,只能在第一次使用。

self.mock_scene.bpyscene.objects.__iter__ = mock.Mock(return_value=iter([mock_lamp_object, mock_lamp_object]))

2 个答案:

答案 0 :(得分:0)

您可以使用side_effect的{​​{1}}参数来覆盖您要测试的类的Mock属性。

根据documentation

  

如果__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及其迭代器,您可以根据需要多次使用它。