模拟修改变量之一的函数

时间:2018-07-06 14:24:46

标签: python unit-testing testing mocking python-mock

说,我有类似的功能:

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>

但是我不知道如何达到这样的效果。

0 个答案:

没有答案