1
我正在使用mock庫修補由兩個文件導入的模塊,這兩個文件定義了一個類及其子類。喜歡的東西:使用相同模擬在兩個不同文件中修改相同的模塊
# ---- 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()
據我瞭解(見here),在我的測試中,我應該修補都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
對象? - 上述處理這種情況的正確方法是?