2

モックライブラリを使用して、クラスとそのサブクラスを定義する 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_2new
  • 上記はこの状況に対処する正しい方法ですか?
4

1 に答える 1