我使用以下代码片段(来自: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
1条答案
按热度按时间h7appiyu1#
我现在走得更远了。
将装饰器更改为
@mock.patch("builtins.open", side_effect=my_mock_open)
然后向测试函数
def test_myfunc(open_mock, mocker):
的参数添加一个自变量然后我就可以用
assert open_mock.call_count == 1