我正在尝试测试一些使用os.walk的代码。我想创建一个临时的内存文件系统,可以用os.walk返回的示例(空)文件和目录填充。这应该为我节省了模拟os.walk调用以模拟递归的复杂性。
具体来说,我要测试的代码是:
if recursive:
log.debug("Recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
else:
log.debug("Non-recursively searching for files under %s" % path)
for (dir_path, dirs, files) in os.walk(path):
log.debug("Found %d files in %s: %s" % (len(files), path, files))
for f in [os.path.join(dir_path, f) for f in files
if not re.search(exclude, f)]:
yield f
这可能在python中吗?
os.walk()
在os.listdir()
和的协助下os.path.islink()
,编号完全围绕周围构造os.path.isdir()
。这些本质上是系统调用,因此您必须在系统级别上模拟文件系统。除非您想编写一个FUSE插件,否则这将不容易模拟。
所有os.walk()
需要的回报是一个元组列表,真的。除非您正在测试操作dirs
组件,否则再简单不过了:
with mock.patch('os.walk') as mockwalk:
mockwalk.return_value = [
('/foo', ('bar',), ('baz',)),
('/foo/bar', (), ('spam', 'eggs')),
]
这将模拟以下目录结构:
/foo
├── baz
└── bar
├── spam
└── eggs
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句