python - 在 Python 中模拟目录结构

标签 python unit-testing

我在下面有一些代码,我用它们来输入文件、打开和处理,然后输出一些数据。我已经使功能正常工作,现在正在对其进行单元测试,下面是代码示例。

def foo(dir):
    path_to_search = join(dir, "/baz/foo")

   if isdir(path_to_search): 
   #path exists so do stuff...

        for fname in listdir(path_to_search):
            do_stuff()

   else:
       print "path doesn't exist"

我已经能够很容易地创建一个过去不存在的测试,但是正如你在上面看到的那样,我断言目录结构的“/baz/foo”部分存在(在生产中目录结构必须有这个文件,在某些情况下它不会,我们不需要处理它。)

我尝试使用 TempDir 创建一个临时目录结构并加入,但代码总是跳出说路径不存在。

是否可以模拟 os.listdir 的输出,这样我就不需要创建一个遵循所需/baz/foo 约定的临时目录结构?

最佳答案

你不需要创建一个假的目录结构,你需要做的就是模拟 isdir()listdir() 函数。

使用 unittest.mock library (或外部 mock library ,对于 Python 版本 < 3.3 完全相同):

try:
    # Python >= 3.3 
    from unittest import mock
except ImportError:
    # Python < 3.3
    import mock

with mock.patch('yourmodule.isdir') as mocked_isdir, \
        mock.patch('yourmodule.listdir') as mocked_listdir:
    mocked_isdir.return_value = True
    mocked_listdir.return_value = ['filename1', 'filename2']

    yourmodule.foo('/spam/eggs')

    mocked_isdir.assert_called_with('/spam/eggs/baz/foo')
    mocked_listdir.assert_called_with('/spam/eggs/baz/foo')

关于python - 在 Python 中模拟目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433240/

相关文章:

iphone - 如何使用 iPhone 的单元测试框架测试 NSAssert 命中案例

c++ - Google Mock中如何访问私有(private)成员

unit-testing - Grails Spock单元测试的重定向和渲染

python - 如何创建一个 os.walk() 函数来比较两个目录的文件夹和子文件夹?

python - Anaconda3 conda命令错误menuinst_win32

c++ - 在现有项目中创建 CPPUnit 测试需要哪些 .cpp 和 .h 文件?

python - Python 是否支持假设作为前提条件?

python - Oneliner 从多个列创建字符串列

python - 在ttk Treeview中设置多个选定的项目

python - 如何使单元测试模拟代码对每个 spark worker 节点(进程)生效