测试和模拟使用异步语句的异步代码

时间:2020-02-09 22:40:58

标签: python python-3.x unit-testing python-asyncio

我有一个简单的异步函数,可以从Web上获取JSON:

async def fetch (session : aiohttp.ClientSession, url : str, pageSize : int = 100, pageNumber : int = 0):
    async with session.get(url, params={'pageSize' : f"{pageSize}", 'pageNumber' : f"{pageNumber}"}) as response:
        return await response.json()

如何为它编写单元测试?我目前正在学习如何在Python中执行此操作,并且已经决定使用unittestaiounittest模块。我用于测试的脚手架如下:

class AsyncTest(aiounittest.AsyncTestCase):
    async def test_fetch(self):
        mocked_session = ... #no idea how to create
        json = await fetch(mocked_session, "url_for_mock", 10, 0)

我认为我必须使用session功能以某种方式模拟unittest.Mock()参数以返回一些经过编码的json数据,但是我对如何执行此操作有些迷失,因此它可以在{{1}中使用}语句。我从未在Python中使用过单元测试库,这里提供一个示例非常有用。我正在使用Python 3.8和async with进行联网。

1 个答案:

答案 0 :(得分:0)

我能够通过实现自己的 for (int a : array) { System.out.print(a + " "); } for(int b:array) { System.out.print(b + " "); } 魔术方法版本并使用__aenter__来模拟相关的AsyncMock方法来模拟异步资源管理器。模拟网络调用的概念验证测试如下所示:

async