Всем привет!

Столкнулся с проблемой использования моков для автотестов в приложении FastAPI.

Есть клиент аутентификации, который используются во вьюхах. Попытки использовать unittest.patch/monkeypatch не произвели никакого эффекта. Но оказалось есть выход - использовать dependency_overrides.

Вот как это можно использовать:

    async def authenticate(request: Request) -> Authentication:
    """ Основная функция для аутентификации, которую нужно замокать """
       ...
       return Authentication(**resp)
    async def _mock_authentication() -> Authentication:
    """ Переопределяет возвращаемое значение функции проверки сессии """
    data = {
        'user': 'test_user',
        ...
        'test': 'test'
    }
    return Authentication(**data)
    def create_test_app() -> FastAPI:
    """ Приложение для использование в тестах """
        app = FastAPI(title='app for tests')
        app.dependency_overrides[authenticate] = _mock_authentication
        ...
        return app