当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python unittest.mock.AsyncMock用法及代码示例


用法:

class unittest.mock.AsyncMock(spec=None, side_effect=None, return_value=DEFAULT, wraps=None, name=None, spec_set=None, unsafe=False, **kwargs)

MagicMock 的异步版本。 AsyncMock 对象的行为将使得该对象被识别为异步函数,并且调用的结果是可等待的。

>>> mock = AsyncMock()
>>> asyncio.iscoroutinefunction(mock)
True
>>> inspect.isawaitable(mock())  
True

mock() 的结果是一个异步函数,它在等待后将具有 side_effectreturn_value 的结果:

  • 如果side_effect 是一个函数,异步函数将返回该函数的结果,
  • 如果side_effect 是异常,异步函数将引发异常,
  • 如果 side_effect 是一个可迭代对象,则异步函数将返回可迭代对象的下一个值,但是,如果结果序列用完,则立即引发 StopAsyncIteration
  • 如果 side_effect 未定义,异步函数将返回由 return_value 定义的值,因此,默认情况下,异步函数返回一个新的 AsyncMock 对象。

MockMagicMockspec 设置为异步函数将导致调用后返回协程对象。

>>> async def async_func(): pass
...
>>> mock = MagicMock(async_func)
>>> mock
<MagicMock spec='function' id='...'>
>>> mock()  
<coroutine object AsyncMockMixin._mock_call at ...>

MockMagicMockAsyncMockspec 设置为具有异步和同步函数的类将自动检测同步函数并将它们设置为 MagicMock(如果父模拟是 AsyncMockMagicMock )或 Mock (如果父模拟是 Mock )。所有异步函数都是 AsyncMock

>>> class ExampleClass:
...     def sync_foo():
...         pass
...     async def async_foo():
...         pass
...
>>> a_mock = AsyncMock(ExampleClass)
>>> a_mock.sync_foo
<MagicMock name='mock.sync_foo' id='...'>
>>> a_mock.async_foo
<AsyncMock name='mock.async_foo' id='...'>
>>> mock = Mock(ExampleClass)
>>> mock.sync_foo
<Mock name='mock.sync_foo' id='...'>
>>> mock.async_foo
<AsyncMock name='mock.async_foo' id='...'>

3.8 版中的新函数。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 unittest.mock.AsyncMock。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。