如何使用 unittest.mock.patch 在 Python 中对函数进行模拟测试

2023-04-13 00:00:00 函数 如何使用 中对

使用 unittest.mock.patch 实现函数的模拟测试可以帮助我们在不改变原函数的情况下,检查函数的调用是否满足测试要求。以下是一个使用 unittest.mock.patch 的示例:

假设我们有一个函数 greet ,它接收一个字符串参数 name ,并输出欢迎语句。我们想测试 greet 函数是否正确地输出了欢迎语句,但我们又不想真正地输出语句到控制台。

代码如下:

def greet(name):
    print(f"Welcome, {name}!")

greet("pidancode.com")

我们可以使用 unittest.mock.patch 执行函数模拟测试。代码如下:

from unittest.mock import patch

@patch("builtins.print")
def test_greet(mock_print):
    greet("皮蛋编程")
    mock_print.assert_called_once_with("Welcome, 皮蛋编程!")

test_greet()

在上面的代码中,我们使用 @patch 装饰器装饰我们的测试函数 test_greet 。@patch 接收一个字符串参数,这个参数是我们想要模拟的函数的路径,在这个例子中,我们想要模拟的函数是内置函数 print ,所以我们传入 "builtins.print" 字符串。

在 test_greet 函数中,我们调用 greet 函数,传入 "皮蛋编程" 作为参数。由于 greet 中调用了 print ,并且我们希望输出被模拟掉,所以我们传入 mock_print 对象,它代替了真正的 print 。

最后,我们使用 assert_called_once_with 方法,检查我们的模拟函数 mock_print 是否恰好被调用一次,并且命令参数是 "Welcome, 皮蛋编程!" 。

使用 unittest.mock.patch ,我们可以在不改变函数行为的情况下,对函数进行模拟测试,确保其行为符合预期。

相关文章