当前位置:  开发笔记 > 编程语言 > 正文

mock.patch()没有修补类调用函数调用内的几个级别的类

如何解决《mock.patch()没有修补类调用函数调用内的几个级别的类》经验,为你挑选了1个好方法。

我有一个任务

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进口Driver



1> Martijn Piet..:

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

from MyProject.utils.drivers import Driver

这是对该类的新的单独引用Driver.如果你现在修补MyProject.utils.drivers.Driver,Worker该类将不会看到修补对象 ; 因为它会使用它自己的全局参考.

修补全球Worker实际使用情况:

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

看到哪里修补部分的的mock文档.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有