Python 如何修补基类方法?
我有两门课:Python 如何修补基类方法?,python,python-mock,Python,Python Mock,我有两门课: class A(object): def get_something(self): return 1 class B(A): pass 当我尝试在测试中修补A.get_时,它失败了 from some_module.myclasses import B ... def test_something(self): with patch('some_module.myclasses.A.get_something', return_valu
class A(object):
def get_something(self):
return 1
class B(A):
pass
当我尝试在测试中修补A.get_时,它失败了
from some_module.myclasses import B
...
def test_something(self):
with patch('some_module.myclasses.A.get_something', return_value=2):
self.assertEqual(B().get_something(), 2)
这里怎么了?发现了。我必须修补导入的
A
from some_module.myclasses import A, B
...
def test_something(self):
with patch.object(A, 'get_something', return_value=2):
self.assertEqual(B().get_something(), 2)
您所做的是正确的,但如果不起作用,则可能是因为其他模块将
A
或B
导入其命名空间,并且没有使用与您修补的包相同的包
当你做这样的事情时,我看到了这种情况:
mypackage/
__init__.py
mod.py
Python模块
mypackage/mod.py
class A(object):
def get_something(self):
return 1
from mod import *
mypackage/\uuuuu init\uuuuuu.py
class A(object):
def get_something(self):
return 1
from mod import *
然后,
mypackage.mod.A
可以作为mypackage.A
导入,但是您的补丁mypackage.mod.A
不,我不是在\uu init\uuuuuuuuuuuupy
中导入它。但是谢谢你的建议