gpt4 book ai didi

python - 为什么模拟 zeep.Client 不工作?

转载 作者:行者123 更新时间:2023-11-28 20:57:16 28 4
gpt4 key购买 nike

我正在为一段使用 zeep 访问 SOAP API 的代码编写单元测试,因此我想模拟 zeep。在我的实际代码中,它看起来像这样:

from zeep import Client

def do_something():
client = Client("...")

在我的测试中,我这样做:

from unittest import mock

@mock.patch('zeep.Client')
def test_do_somethi(self, MockedClient):
do_something()

实际函数正在获取的 Client 是实际的 zeep 客户端,而不是我的模拟。我也试过:

@mock.patch('zeep.client.Client')

结果是一样的。

我也试过:

def test_do_something(self):
with mock.patch('zeep.client.Client') as MockedClient:
do_something()

没有区别。

知道为什么这不起作用吗?

最佳答案

当 mock 不起作用时,首先要查找的是您是否修补了正确的名称。三种常见的导入场景:

(a) 如果你想模拟出 zeep 但你导入 like

from zeep import Client

并且您的测试在同一个文件中,您修补 Client 而不是 zeep.Client

(b) 如果您改为像这样导入它

import zeep

然后在 SUT 代码中使用 zeep.Client,然后修补 zeep.Client

(c) 如果您正在测试位于其他模块(如 mymodule)中的代码,并且您在其中导入 zeep

from zeep import Client # (1)

然后在你的测试模块中你

import mymodule

然后你修补 mymodule.Client, ... 或者 mymodule.zeep.Client 如果你在 ( 1).

关于python - 为什么模拟 zeep.Client 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497477/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com