如何防止在python中对磁盘的所有写入

时间:2016-09-08 10:27:12

标签: python

在进行自动化测试时,我喜欢确保我的脚本不会将任何数据写入磁盘。我正在对整个脚本进行测试,而不是单个函数的单元测试。

有没有办法拦截python脚本在此脚本中执行的所有Disk-IO?

显然,我可以模拟open函数(例如使用mock包http://www.voidspace.org.uk/python/mock/helpers.html?#mock-open),但问题是我需要知道open发生在哪个模块中。我必须模仿__main__.open以及__module1.openmodule2.open等等。 问题是我不知道哪些模块会写入文件。

1 个答案:

答案 0 :(得分:1)

如果模仿open就足够了,你可以将模拟器粘贴到builtins module;这是为所有内置函数提供咨询的模块:

with mock.patch('builtins.open', mock_open()):
    # ...

在Python 2中,模块名为__builtin__

请注意,这并不一定能捕获所有写入;任何使用os.open()直接使用操作系统文件句柄或使用io.open()codecs.open()的内容仍可能最终写入磁盘。