モックライブラリを使用して、クラスとそのサブクラスを定義する 2 つのファイルによってインポートされるモジュールにパッチを適用しています。何かのようなもの:
# ---- 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
- 上記はこの状況に対処する正しい方法ですか?