我正在使用模拟库来修补由两个文件导入的模块,这些文件定义了一个类及其子类。就像是:
# ---- file module_to_patch.py -----
def foo():
return 1
def faa():
return 2
# ---- file base_class.py -----
import module_to_patch
class base_class(object):
def __init__(self):
self.x = module_to_patch.foo()
# ---- file sub_class.py -----
import module_to_patch
class sub_class(object):
def __init__(self):
super(sub_class, self).__init__()
self.y = module_to_patch.faa()
据我了解(见这里),在我的测试中,我应该同时修补base_class.module_to_patch
和sub_class.module_to_patch
,例如:
# file test_sub_class.py:
from unittest import TestCase
from mock import patch
class TestSubClass(TestCase):
def setUp(self):
self.patcher_1 = patch('base_class.module_to_patch', autospec=True)
self.mock_1 = self.patcher_1.start()
self.patcher_2 = patch('sub_class.module_to_patch', autospec=True)
self.mock_2 = self.patcher_2.start()
def tearDown(self):
patch.stopall()
问题:
- 有没有更简单的方法来实现这个功能?
- 如果不是 - 两个补丁都修补同一个实体,我怎样才能让两个补丁返回同一个
Mock()
对象?我只是作为对象传递mock_1
给吗?patcher_2
new
- 以上是处理这种情况的正确方法吗?