首页 > 解决方案 > Python模拟对象迭代器无法迭代多次

问题描述

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

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

标签: pythonunit-testingiteratormocking

解决方案


您可以使用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

推荐阅读