我正在尝试将字符串写入python mock库中的模拟文件对象,但事实证明我写入模拟对象的方法不会持久存在,即使在内存中,它似乎也是如此。
我在ipython shell中尝试这样:
In [1]: import mock
In [2]: fnopen = mock.mock_open()
In [3]: filehandle = fnopen()
In [4]: filehandle.write('ABC')
In [5]: filehandle.read()
Out[5]: ''
正如您所看到的,在执行'ABC'
时,我没有得到预期的f.read()
,而是一个空字符串。
我在做什么或理解错误?
答案 0 :(得分:3)
不需要模拟。
如果你想要测试的内容是像对象一样的内存文件,你可以使用StringIO:
>>> import StringIO
>>> file_like = StringIO.StringIO()
>>> file_like.write('ABC')
>>> file_like.seek(0)
>>> file_like.read()
'ABC'
答案 1 :(得分:1)
mock.mock_open()
返回一个MagicMock
对象,这意味着您无法回读您写入的内容,因为它不会复制open
的功能,只会签名
但是,您可以使用以下命令检查是否使用正确的参数调用filehandle.write
:
filehandle.write.assert_called_with('ABC')
至于你为什么要这样做,我不确定,因为你基本上是在测试模拟库。虽然我希望你没有分享你的真实代码。
来源:http://www.voidspace.org.uk/python/mock/helpers.html#mock-open
答案 2 :(得分:0)
您可以在方法mock_open中使用param read_data:
{{1}}