以下是我的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)
答案 0 :(得分: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)