2019-11-27
This is my first blog post.
Mocking an async context manager, eg for aiohttp
:
What we need to mock:
post
method. Mocksession.post
synchronous method. returns a class implementing the async context manager protocol. Mocksession.post
. again a Mock__aenter__
method of the context manager. a real async method that returns AsyncMock__aenter__
async method (named as response
). AsyncMock__aexit__
async method of the ACM. must return None to not suppress the exception
the default return_value of a Mock is a truthy MagicMock
if aexit returns something truthy, the exception is suppressed.text()
method of the response object. AsyncMock
"""A mock for aiohttp.ClientSession."""
return
"""A mock for aiohttp.ClientResponse."""
return
# Mock aiohttp.ClientResponse returned by __aenter__ method
# of the async context manager returned by post()
=
=
# Mock for aiohttp.ClientSession.post that correctly handles the async context manager.
# A mock_response will be returned by `async with ... as response`
=
=
=
=
Similar to
# can either define it ourselves
yield
pass
# or use mocks
=
pass
There we go.
Is this the most interesting thing I hope to write about? Certainly not. But it was something recent and easy enough to write about that I could use it to motivate myself to get this site and blog officially up and running.
Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet. Lorem ipsum dolor emet.