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)

然后你可以模拟get_functions()并注入1个或多个函数(但基于代码我看不到注入多个函数的任何价值):

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 回答