diff options
author | Xtreak <tir.karthi@gmail.com> | 2019-09-10 10:37:17 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-09-10 10:37:17 (GMT) |
commit | c8dfa7333d6317d7cd8c5c7366023f5a668e3f91 (patch) | |
tree | 94c61ee92b8f6ae47722db90893a1acad44f54a4 | |
parent | bd0c7a12d9e28ce74bfc16244d7694aca906838c (diff) | |
download | cpython-c8dfa7333d6317d7cd8c5c7366023f5a668e3f91.zip cpython-c8dfa7333d6317d7cd8c5c7366023f5a668e3f91.tar.gz cpython-c8dfa7333d6317d7cd8c5c7366023f5a668e3f91.tar.bz2 |
bpo-37052: Add examples for mocking async iterators and context managers (GH-14660)
Add examples for mocking asynchronous iterators and asynchronous context managers.
https://bugs.python.org/issue37052
-rw-r--r-- | Doc/library/unittest.mock-examples.rst | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst index 811f0fb..cf6b671 100644 --- a/Doc/library/unittest.mock-examples.rst +++ b/Doc/library/unittest.mock-examples.rst @@ -12,6 +12,7 @@ .. testsetup:: + import asyncio import unittest from unittest.mock import Mock, MagicMock, patch, call, sentinel @@ -276,6 +277,44 @@ function returns is what the call returns: 2 +Mocking asynchronous iterators +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since Python 3.8, ``MagicMock`` has support to mock :ref:`async-iterators` +through ``__aiter__``. The :attr:`~Mock.return_value` attribute of ``__aiter__`` +can be used to set the return values to be used for iteration. + + >>> mock = MagicMock() + >>> mock.__aiter__.return_value = [1, 2, 3] + >>> async def main(): + ... return [i async for i in mock] + >>> asyncio.run(main()) + [1, 2, 3] + + +Mocking asynchronous context manager +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since Python 3.8, ``MagicMock`` has support to mock +:ref:`async-context-managers` through ``__aenter__`` and ``__aexit__``. The +return value of ``__aenter__`` is an :class:`AsyncMock`. + + >>> class AsyncContextManager: + ... + ... async def __aenter__(self): + ... return self + ... + ... async def __aexit__(self): + ... pass + >>> mock_instance = MagicMock(AsyncContextManager()) + >>> async def main(): + ... async with mock_instance as result: + ... pass + >>> asyncio.run(main()) + >>> mock_instance.__aenter__.assert_called_once() + >>> mock_instance.__aexit__.assert_called_once() + + Creating a Mock from an Existing Object ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |