gpt4 book ai didi

python - mock.patch() 不修补在函数调用中调用了几个级别的类

转载 作者:行者123 更新时间:2023-11-28 21:53:47 36 4
gpt4 key购买 nike

我有一个任务

def task():
a = worker()
a.do_some_work()

Worker 本身是独立模块中的独立类,他们使用这样的 Driver 类,

class Worker(object):
def __init__(self):
self.driver = Driver(args)
...

Driver 是单独模块中的单独类

所以当我尝试类似的东西时

with patch('package.module.Driver', new=Mock(return_value=999)):
task()

在任务中仍然有一个 Driver 类实例,但不是模拟。那是错误的。如何解决?

UPD1:DriverWorker 存在于不同的模块中,Worker import Driver

最佳答案

您的 MyProject.Workers.base 模块将 Driver 作为全局导入:

from MyProject.utils.drivers import Driver

这是对 Driver 类的新的、单独的引用。如果您现在修补 MyProject.utils.drivers.DriverWorker将看不到修补的对象;因为它将使用它自己的全局引用。

修补全局 Worker 实际使用:

with patch('MyProject.Workers.base.Driver', new=Mock(return_value=999)):
task()

参见 Where to patch section mock 文档。

关于python - mock.patch() 不修补在函数调用中调用了几个级别的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509304/

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