说,我有类似的功能:
def add_errors_if_need(param1, param2, errors):
for <condition_on param_1>:
errors.append(<something>)
if <condition_on_param2>:
errors.append(<something_else>)
它不返回任何内容-只需将内容添加到给定的errors
列表中即可。
现在在我的课程中,或实际上在任何地方,我都具有这样的代码:
def my_method(<many_stuff_here>):
error_list = []
if <condition>:
error_list.append(<error_msg>)
add_errors_if_need(param1, param2, errors=error_list)
...
<some other checks that may append something to error_list>
if errors:
return error_parser(errors) # formats and prints error messages
return <success_action>
它运行得很好,问题是,我正在尝试编写一个模拟它的测试,但是由于它不返回任何值(并且我想保持原样),因此我该如何模拟它因此会修改error_list
变量?
如果它将返回列表,我可以做类似的事情(我正在使用pytest):
@patch('path.to.add_errors_if_need'):
def test_my_life(mocked_function, fixture1, fixture2):
mocked_fun.return_value = [('error_field', 'error_message')]
result = MyClass.my_method(<many_arguments>)
assert result == <formatted_error_list>
但是我不知道如何达到这样的效果。