1

尝试模拟 aiohttp.ClientSession 的响应以进行测试

我的代码如下所示:

async def run_request(endpoint: str, **kwargs) -> dict:
    async with aiohttp.ClientSession() as session:
        async with session.post(endpoint, **kwargs) as response:
            response_json = await response.json()

            return {"response": response, "response_json": response_json}

我想用我想象的像这样的东西来测试我的代码:

@patch("aiohttp.ClientSession.post", <something>)
def test_run_request(self):

我怎样才能做到这一点?

4

1 回答 1

2

这个问题有很多不同的解决方案,我认为最简单的方法是使用 aioresponses lib。(https://github.com/pnuckowski/aioresponses

但这只有在您只使用没有 aiohttp.web.Application 的 ClientSession 时才能正常工作。如果您使用 CS 作为 aiohttp.web.Application 的一部分,您将破坏应用程序 test_client (pytest-aiohttp)。

另请参阅此问题How to mock aiohttp.client.ClientSession.get async context manager。那里有一些有用的例子。

于 2020-02-11T12:42:59.433 回答