编程语言
首页 > 编程语言> > 用Python模拟无限生成器

用Python模拟无限生成器

作者:互联网

我正在尝试使用模拟库模拟无限生成器函数. (如果您使用Python 3.3,则为unittest.mock)

这是无限生成器的最小工作示例.如果我可以成功地模拟它,那么我希望能够模拟我正在使用的实际功能.

import itertools
def infinite_generator():
    thing = itertools.cycle([1, 2])
    while True:
        yield next(thing)

到目前为止,这是我尝试过的:

import mock
import itertools
mock_func = mock.MagicMock()
mock_func.__iter__.return_value = itertools.cycle([1, 2])

我想让mock_func与infinite_generator函数完全一样.

例如我希望能够做到以下几点:

>>> a = mock_func()
>>> next(a)
1
>>> next(a)
2
>>> next(a)
1
>>> next(a)
2

等等

但是,此刻next(a)返回类似

< MagicMock名称='mock().__ next __()'id ='3043937712'>

解决方法:

在这里省略__iter__,因为您不打算遍历嘲笑对象本身:

mock_func.__iter__.return_value = itertools.cycle([1, 2])

代替:

>>> mock_func = mock.Mock()
>>> mock_func.return_value = itertools.cycle([1, 2])
>>> a = mock_func()
>>> next(a)
1
>>> next(a)
2
>>> next(a)
1
>>> next(a)
2

标签:python-unittest,unit-testing,mocking,python-3-x,python
来源: https://codeday.me/bug/20191121/2053409.html