[英]Mock streaming API in python for unit test
我有一个异步 function 调用流式 api。 为这个 function 编写单元测试的最佳方法是什么? 必须模拟 api 响应。
我尝试使用 aiounittest 并使用来自 unittest 的模拟。 但这会调用实际的 api 而不是得到模拟响应。 还尝试使用 pytest.mark.asyncio 注释,但这一直给我错误 - 从未等待协程。 我已经验证 pytest-asyncio 已经安装。
我正在使用 VS Code 和 Python 3.6.6
这是相关的代码片段:
async def method1():
response = requests.get(url=url, params=params, stream=True)
for data in response.iter_lines():
# processing logic here
yield data
粘贴一些我尝试过的测试。
def mocked_get(*args, **kwargs):
#implementation of mock
class TestClass (unittest.TestCase):
@patch("requests.get", side_effect=mocked_get)
async def test_method (self, mock_requests):
resp = []
async for data in method1:
resp.append (data)
#Also tried await method1
assert resp
还尝试了 class TestClass (aiounittest.AsyncTestCase):
使用asynctest
而不是aiounittest
。
unittest.TestCase
替换为asynctest.TestCase
。from unittest.mock import patch
替换为from asynctest.mock import patch
。async for data in method1:
应该是async for data in method1():
。import asynctest
from asynctest.mock import patch
class TestClass(asynctest.TestCase):
@patch("requests.get", side_effect=mocked_get)
async def test_method(self, mock_requests):
resp = []
async for data in method1():
resp.append(data)
assert resp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.