0

以下は私のpythonモジュールですmy_func.py

def get_data(request):
    function_1(request)

function_1関数内の正しいrequest引数で呼び出されget_data()、次のテストが正常に機能するかどうかをテストしたい。

class GetDataTest(TestCase):

    @patch("my_func.function_1", autospec=True)
    def test_get_data(self, function_1_mock):
        request_mock = MagicMock()
        my_func.get_metadata(request_mock)
        function_1_mock.assert_called_once_with(request_mock)

Pythonモジュールmy_func.pyを関数の配列がある次のように変更すると、関数を個別にモックする方法に苦労しています。

functions = [
    function_1,
    function_2,
    function_3
]

def get_data(request):
    for function in functions:
       function(request)
4

1 に答える 1

1

このコードをテストするためにすべての関数をモックする必要はありません。代わりに、リストの内容を置き換えることをお勧めします。

まず、モジュール変数の代わりに、ファクトリ メソッドを導入します。

def get_functions():
  return [
    function_1,
    function_2,
    function_3
    ]

def get_data(request):
    for function in get_functions():
       function(request)

次に、1つ以上の関数をモックget_functions()してそこに注入できます(ただし、コードに基づいて、複数を注入する価値はありません):

class GetDataTest(TestCase):

    @patch("my_func.function_1_mock", autospec=True)
    def test_get_data(self, function_1_mock):
        my_func.get_functions = MagicMock(return_value=[function_1_mock])
        request_mock = MagicMock()
        my_func.get_metadata(request_mock)
        function_1_mock.assert_called_once_with(request_mock)
于 2020-06-04T17:40:18.503 に答える