【问题标题】:Pytest mock file write for arbitrary filesPytest模拟文件写入任意文件
【发布时间】:2021-11-11 18:01:51
【问题描述】:

我试图模拟下面的代码 sn-p 出来,但一直碰壁。

with open(file_path, 'wb') as f:
    f.write(b''.join(byte_data))

在我试图模拟这一点的测试中,我实际上也不想写入文件。实际上,我什至不在乎文件是否已打开。 使用任意file_path 多次调用open。理想情况下,整个卡盘都会被嘲笑。

我已尝试使用 mock_open 帮助程序,但无法正常工作。

一般来说,我只想修补 builtins.open 以及需要修补的任何东西来修补代码的 f.write(b''.join(byte_data)) 部分。

【问题讨论】:

  • 只模拟builtins.open 就足够了,f 也可以模拟,所以不需要单独模拟write。你尝试了什么?

标签: python-3.x mocking pytest pytest-mock


【解决方案1】:

您必须在使用它的模块中修补open(),而不是在它定义的地方。

带有实现的模块foo.py

def bar(file_path, byte_data):
    with open(file_path, "wb") as f:
        f.write(b''.join(byte_data))

使用pytest-mock plugin 中的mocker 夹具在test_foo.py 中进行测试:

import foo

def test_foo(mocker):
    mocker.patch("foo.open")
    foo.bar("somefilepath", [b"a", b"b", b"c"])

修补open()后,打开的是unittest.mock.MagicMock对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多