Python 模拟测试函数数组
Python mock test array of functions
以下是我的python模块my_func.py
def get_data(request):
function_1(request)
我想测试 function_1
是否在 get_data()
函数中使用正确的 request
参数调用,下面的测试工作正常。
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)
您真的不需要模拟所有函数来测试此代码。相反,我会建议替换列表内容。
首先 - 引入工厂方法而不是模块变量:
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)
以下是我的python模块my_func.py
def get_data(request):
function_1(request)
我想测试 function_1
是否在 get_data()
函数中使用正确的 request
参数调用,下面的测试工作正常。
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)
您真的不需要模拟所有函数来测试此代码。相反,我会建议替换列表内容。
首先 - 引入工厂方法而不是模块变量:
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)