使用嵌套函数更改进行模拟测试

Mock testing with nested function changes

我正在向管道项目添加测试,代码已经编写并投入生产,因此无法更改它以适应测试。

简单来说,如果我有这样的函数:

def other_foo():
    return 1

def foo():
    res = other_foo()
    return res

实际上,other_foo调用会return多种响应,但为了测试,我想创建一个固定的响应来测试foo

所以在我的测试中我想创建一个固定的响应 other_foo of 2. 我的测试评估是这样的:

def test_foo():
    # some mocking or nesting handle here for other_foo
    res = foo()
    assert res == 2

使用 unitest.mock 中的 patch 装饰器并修补您的模块局部变量。

from your.module import foo
from unitest.mock import patch

@patch('your.module.other_foo')
def test_foo(mock_other_foo):
    mock_other_foo.return_value = 3
    assert foo() == 3
    mock_other_foo.return_value = 42
    assert foo() == 42

您可以找到更多信息here and there