首页 > 解决方案 > 使用装饰器模拟包装函数中的导入

问题描述

我想编写一个装饰器,在应用时模拟模拟函数的导入,例如,我想要以下代码:

from .decorator import mock_api
from .biz_logic import call_api


@mock_api
def test_api_mock():
    call_api()

Wherecall_api包含在直接或间接导入从模块调用的类Api的模块api_library中。我希望实现看起来像这样,但它不起作用

import mock


class MockApi:
    pass


def mock_api(func):
    @mock.patch(
        "api_library.Api", mock.MagicMock(return_value=MockApi)
    )
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)

    return wrapper

我受到moto图书馆的启发,并希望完成与他们使用方便的装饰器所做的类似的事情,例如mock_s3

标签: pythonunit-testingmockingmoto

解决方案


推荐阅读