5

我有一个任务

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类实例,但没有一个 mock。那是错误的。如何解决?

UPD1Driver并存Worker在于不同的模块中并Worker导入Driver

4

1 回答 1

8

您的模块作为全局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()

请参阅文档的修补位置部分mock

于 2014-08-26T15:47:21.907 回答