在进行自动化测试时,我喜欢确保我的脚本不会将任何数据写入磁盘。我正在对整个脚本进行测试,而不是单个函数的单元测试。
有没有办法拦截python脚本在此脚本中执行的所有Disk-IO?
显然,我可以模拟open函数(例如使用mock包http://www.voidspace.org.uk/python/mock/helpers.html?#mock-open),但问题是我需要知道open发生在哪个模块中。我必须模仿__main__.open
以及__module1.open
和module2.open
等等。
问题是我不知道哪些模块会写入文件。
答案 0 :(得分:1)
如果模仿open
就足够了,你可以将模拟器粘贴到builtins
module;这是为所有内置函数提供咨询的模块:
with mock.patch('builtins.open', mock_open()):
# ...
在Python 2中,模块名为__builtin__
。
请注意,这并不一定能捕获所有写入;任何使用os.open()
直接使用操作系统文件句柄或使用io.open()
或codecs.open()
的内容仍可能最终写入磁盘。