首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他文件修补方法不起作用。

从其他文件修补方法不起作用。
EN

Stack Overflow用户
提问于 2022-09-12 18:11:09
回答 1查看 26关注 0票数 1

我在api/controllers/orders.py文件中有一种方法,比如api/controllers/orders.py。该方法不是任何类的一部分。

现在,我有了一个新的文件,比如api/controllers/dispatchers.py,在这里我需要知道选择了哪个仓库。我从这个文件中调用_select_warehouse_for_order来获取这个信息。

现在,在我的测试用例中,我像这样修补_select_warehouse_for_order

代码语言:javascript
复制
from unittest.mock import patch, call

def test_delivery_assignment(self, app_context):
    with patch('api.controllers.orders._select_warehouse_for_order') as mock_selected_wh:
        mock_selected_wh.return_value = {}
        app_context.client.set_url_prefix('/v2')
        response = app_context.client.get('/delivery/dispatch')
        assert response.status_code == 200

我面临的问题是我的补丁程序没有返回空字典。当我开始调试时,我注意到它执行了_select_warehouse_for_order中的实际代码。我是不是漏掉了什么?

更新:下面是dispatchers.py中的代码

代码语言:javascript
复制
from api.controllers.orders import _select_warehouse_for_order

@bp.route("/dispatch")
@login_required
def dispatch():
  warehouses = _select_warehouse_for_order(request=request)
    if len(warehouses) == 0:
        logger.info("No warehouse selected")
        return

    logger.info("Selected warehouse: %s", warehouses[0].name)
    # return response
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-12 18:36:08

必须在使用方法的位置进行修补,而不是在声明方法的位置进行修补。在您的示例中,您正在修补'api.controllers.orders._select_warehouse_for_order',该方法就是在这里声明的。相反,修补程序'dispatchers._select_warehouse_for_order' (可能以包含dispatchers的任何包作为前缀)。

之所以这么做是因为当你

代码语言:javascript
复制
from api.controllers.orders import _select_warehouse_for_order

您可以在_select_warehouse_for_order中声明一个名称dispatchers.py,该名称引用在api/controllers/orders.py中声明的函数。实际上,您已经创建了对函数的第二个引用。现在当你打电话

代码语言:javascript
复制
  warehouses = _select_warehouse_for_order(request=request)

您使用的是dispatchers.py中的引用,而不是api/controllers/orders.py中的引用。因此,为了用补丁替换这个函数,您必须使用dispatchers._select_warehouse_for_order

注意import在python中与Java中的不同之处,因为我们创建了一个新的名称,并将其分配给现有的函数或类。另一方面,当代码中提到类时,Java导入会告诉编译器在哪里查找类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73693573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档