asyncmock

Extension to the standard mock framework to support support async


Keywords
testing, mock, asyncio
License
BSD-3-Clause
Install
pip install asyncmock==0.4.2

Documentation

Async Mock

Awaitable mocks for async code.

https://travis-ci.org/timsavage/asyncmock.svg?branch=master

The package specifically only extends mock and not any other part of unittest.

Note

Mock 4.0+ (included within Python 3.8+) now includes an awaitable mock mock.AsyncMock. This is recommended for new projects.

Installation

Install using pip:

pip install asyncmock

Usage

Async Mock is a drop in replacement for a Mock object eg:

my_mock = AsyncMock()

await my_mock("foo", bar=123)

my_mock.assert_called_with("foo", bar=123)

This also works with nested methods:

my_mock = AsyncMock()

await my_mock.my_method("foo", bar=123)

my_mock.my_method.assert_called_with("foo", bar=123)

Side effects and return values can also be awaited.

Including a non-awaitable item:

my_mock = AsyncMock()

my_mock.my_method.not_async = True
my_mock.my_method("foo", bar=123)

The not_async option can also be provided as an init argument. The not_async argument is not inherited by sub-mocks.

pytest Example

These examples use pytest along with the pytest-asyncio plugin.

Generating an exception:

@pytest.mark.asyncio
async def test_raise_exception():
    my_mock = AsyncMock(side_effect=KeyError)

    with pytest.raises(KeyError):
        await my_mock()

    my_mock.assert_called()