Издевательство над соединением redis в pytest

Я пытаюсь протестировать свое приложение с помощью pytest. Приложение использует Redis для хранения переменной, и об изменениях этой переменной сообщается пользователям, подключенным к приложению.

Я хочу создать такое приспособление, которое будет исправлять конструкторы Redis() в моем приложении для подключения к локальной базе данных Redis, работающей в фоновом режиме.

Я пробовал что-то подобное в моем conftest.py:

@pytest.fixture(autouse=True)
def redis_connection():
    r_conn = redis.Redis('127.0.0.1', 6337)
    with mock.patch('app.redis_utils.redis_connect') as redis_connect_mock:
        redis_connect_mock.return_value = r_conn
        yield redis_connect_mock
    r_conn.flushdb()

app.redis_utils.redis_connect содержание:

def redis_connect() -> Redis:
    return Redis(**settings.REDIS_SETTINGS)

Но это не удается, когда мое приложение пытается получить доступ к данным из базы данных Redis (я вызываю .get() в экземпляре Redis).

AssertionError: assert <MagicMock name='redis_connect.get()' id='139688062779600'> is None

Что я могу сделать, чтобы заставить функцию redis_connect возвращать этот конкретный экземпляр: redis.Redis('127.0.0.1', 6337)?


person umat    schedule 02.02.2020    source источник
comment
Вероятно, вам следует рассмотреть возможность использования библиотеки имитации redis stackoverflow.com/questions/30531291/   -  person Anthony Kong    schedule 03.02.2020