模拟pytest的目录子树

时间:2016-12-12 12:16:52

标签: python unit-testing mocking pytest

我有递归代码来从给定目录收集测试。它依赖于几个函数: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

感谢。

1 个答案:

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