材料模拟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
總結
以上是生活随笔為你收集整理的材料模拟python_用Python模拟无限生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画图角度_Python画图
- 下一篇: websocket python爬虫_p