使用Python中的mock_open模拟特定文件

92vpleto  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(192)

我使用以下代码片段(来自:How do I mock a file open for a specific path in python?

builtin_open = open
def my_mock_open(*args, **kwargs):
    if args[0] == "myFile":
        # mocked open for path "myFile"
        return mock.mock_open()(*args, **kwargs)
    # unpatched version for every other path
    return builtin_open(*args, **kwargs)

def test_myfunc(mocker):
    mocker.patch('builtins.open', my_mock_open)
    myfunc()

这很好用,因为它只模拟对myFile的调用,而不模拟myfunc()读取的其他文件。但我也想Assert正确的数据被尝试写入文件myFile。我尝试过将模拟放在一个上下文"with as"语句中,但没有成功。
AttributeError: 'function' object has no attribute assert_called_with

h7appiyu

h7appiyu1#

我现在走得更远了。
将装饰器更改为@mock.patch("builtins.open", side_effect=my_mock_open)
然后向测试函数def test_myfunc(open_mock, mocker):的参数添加一个自变量
然后我就可以用assert open_mock.call_count == 1

相关问题