如何使用mock在python中写入和读取模拟文件对象?

时间:2015-05-19 14:54:39

标签: python unit-testing mocking

我正在尝试将字符串写入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(),而是一个空字符串。

我在做什么或理解错误?

3 个答案:

答案 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}}