如何在 Python Unittest.Mock 中模拟打开的文件?

Linda Hamilton
发布: 2024-10-20 16:27:02
原创
482 人浏览过

How to Mock Open Files in Python Unittest.Mock?

在 Python Unittest.Mock 中模拟打开文件

在测试使用文件操作的 Python 代码时,有效地模拟打开文件的行为至关重要。在 with 语句中使用 open 时会出现一种特定情况,如以下代码所示:

<code class="python">def testme(filepath):
    with open(filepath) as f:
        return f.read()</code>
登录后复制

Python 3

要模拟此 open 操作,请使用unittest.mock 与mock_open 结合使用,它是mock 框架的一部分。 patch 充当上下文管理器,返回用于替换修补对象的对象:

<code class="python">from unittest.mock import patch, mock_open
with patch("builtins.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
登录后复制

或者,patch 也可以用作装饰器。然而,使用mock_open()的结果作为新参数可能会很麻烦。相反,请利用 patch 的 new_callable 参数,并记住 patch 未使用的其他参数将传递给 new_callable 函数:

<code class="python">@patch("builtins.open", new_callable=mock_open, read_data="data")
def test_patch(mock_file):
    assert open("path/to/open").read() == "data"
    mock_file.assert_called_with("path/to/open")</code>
登录后复制

请注意,在此实例中,patch 将提供模拟对象作为测试函数的参数.

Python 2

对于 Python 2,需要修补 __builtin__.open 并单独导入模拟:

<code class="python">from mock import patch, mock_open
with patch("__builtin__.open", mock_open(read_data="data")) as mock_file:
    assert open("path/to/open").read() == "data"
mock_file.assert_called_with("path/to/open")</code>
登录后复制

以上是如何在 Python Unittest.Mock 中模拟打开的文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板