我有一项任务
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 :
Driver
和Worker
住在不同的模块中Worker
导入Driver
答案 0 :(得分:5)
您的MyProject.Workers.base
模块导入Driver
为全局:
from MyProject.utils.drivers import Driver
这是{em>新的单独引用到Driver
类。如果您现在修补MyProject.utils.drivers.Driver
,则Worker
类将看不到修补后的对象;因为它会使用它自己的全局参考。
修补全局Worker
实际使用:
with patch('MyProject.Workers.base.Driver', new=Mock(return_value=999)):
task()
请参阅mock
文档的Where to patch section。