gpt4 book ai didi

python - 模拟打开以在 python 中进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:04 25 4
gpt4 key购买 nike

我想使用 unittest 测试一种使用上下文管理器从文件中读取的方法:

with open(k_file, 'r') as content_file:
content = content_file.read()

我不想在我的系统上创建一个文件,所以我想模拟它,但目前我并没有成功。我找到了 mock_open但我真的不明白我应该如何使用它并在我的测试用例中将模拟作为 content_file 提供。例如这个 post在这里,但我不明白如何在不修改原始代码的情况下在测试用例中编写它。

谁能指出我正确的方向?

最佳答案

mock_open() 是要走的路;您使用 mock_open() 调用的结果在您的被测代码中修补 open:

mocked_open = unittest.mock.mock_open(read_data='file contents\nas needed\n')
with unittest.mock.patch('yourmodule.open', mocked_open, create=True):
# tests calling your code; the open function will use the mocked_open object

patch() context manager会将一个 open() 全局放入您的模块(我将其命名为 yourmodule),绑定(bind)到 mocked_open() 生成的对象。该对象在调用时将假装生成一个文件对象。

这个模拟文件对象不会做的唯一一件事就是迭代;你不能用它做 for line in content_file ,至少在 mock 库的当前版本中不能。参见 Customizing unittest.mock.mock_open for iteration解决方法。

关于python - 模拟打开以在 python 中进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com