函数 pytest 中的模拟函数?

One*_*ece 5 python function pytest python-3.x

def func1():
    return 5
    
def func2(param1, param2):
    
    var1 = func1()
    return param1 + param2 + var1
Run Code Online (Sandbox Code Playgroud)

我想使用 pytest 通过模拟第一个函数来测试第二个函数,但我不知道如何执行此操作。

@pytest.fixture(autouse=True)
def patch_func1(self):
    with mock.patch(
        "func1",
        return_value= 5,
    ) as self.mock_func1:
        yield
Run Code Online (Sandbox Code Playgroud)

我认为可以通过上面的依赖注入和固定装置来完成,但这意味着更改 func1 ,而我不想这样做。

Ita*_*ayB 6

你不需要改变任何东西。

您可以使用mocker固定装置pytest(需要安装pytest-mock)。不用担心争论mocker,它会神奇地发挥作用。

def test_func2(mocker):
    mocked_value = 4
    first = 1
    second = 2
    func1_mock = mocker.patch("func1")
    func1_mock.return_value = mocked_value
    actual_value = func2(first, second)
    assert actual_value == first + second + mocked_value
Run Code Online (Sandbox Code Playgroud)