我有递归代码来从给定目录收集测试。它依赖于几个函数:isdir,isfile和acess to files。它希望可以使用os.listdir列出目录。
要测试这个函数,我需要以非常重要的方式模拟很多函数。有没有办法用给定的文件列表以简短的方式模拟所有os / os.path相关的东西?像“mock_subdir(example_in_tar_gz):
”或某种DSL来描述模拟的目录树结构。
感兴趣的功能:
def gather_tests(path):
if os.path.isdir(path):
filelist = [os.path.join(path, f) for f in os.listdir(path)]
filelist.sort()
all_files = map(gather_tests, filelist)
return filter(None, all_files)
elif os.path.isfile(path) and os.access(path, os.X_OK):
return path
else:
return None
感谢。
答案 0 :(得分:1)
您可以使用pytest tmpdir fixture创建临时目录。它比模拟每个函数更容易。
或者如果你真的想模拟这些函数,你只需要模拟:isdir,listdir,isfile和access:
with mock.patch('module.isdir') as mock_isdir, \
mock.patch('module.listdir') as mock_listdir, \
mock.patch('module.iffile') as mock_isfile, \
mock.patch('module.access') as mock_access:
mock_isdir.return_value = True
mock_listdir.return_value = ['file1', 'file2']
mock_isfile.return_value = True
mock_access.return_value = True