如何测试创建目录的函数?

时间:2015-09-23 19:44:04

标签: python unit-testing testing

如何在Python中测试创建目录的函数?你能给出一个例子make_directory_test()函数吗?

def make_directory(directory):
    if not os.path.exists(directory):
        os.makedirs(directory)

2 个答案:

答案 0 :(得分:3)

只测试该目录是否存在

def test_make_directory(self):
    directory_path = '...' # somepath

    make_directory(directory_path)

    self.assertTrue(os.path.exists(directory_path))

确保在tearDownsetUp中的每次测试后删除在单元测试中创建的任何目录,以确保测试的独立性

答案 1 :(得分:2)

这里的一个好习惯是学习如何使用mockflexmock等测试框架

此外,您应该使用Python的unittest框架。

这里的目标不一定是为了确保创建某些东西,而是要调用它。所以你想做的就是模拟外部调用来帮助测试你的方法的正确流程。所以在这种情况下你应该模拟存在和makedirs。然后确保它被调用。这将是一个可接受的单元测试。你会做这样的事情:

让我们假设您的主代码位于名为my_module.py的模块中。所以你想要创建一个测试文件,让我们把它称为test.py以保持简单,并在你的单元测试中做这样的事情:

from mock import patch
import my_module
import unittest


class MyTest(unittest.TestCase):
    @patch('my_module.exists')
    @patch('my_module.makedirs')
    def test_create_dir(self, mock_make_dirs, mock_exists):
        mock_exists.return_value = True

        make_directory('thing_to_create')

        mock_make_dirs.assert_called_with('thing_to_create')

所以,这里发生的事情是你告诉模拟你要嘲笑makedirs并存在。您使用mock_exists.return_value指定的True返回存在。然后你正在进行实际通话,你的模拟将在该方法调用中生效。 mock_make_dirs.assert_called_with的最后一行将确保实际调用您创建目录的方法。

如果您仍想测试某些内容确实已创建

在这种情况下你可以做的是,可能冒险使用上下文管理器并创建一个临时文件夹进行测试,做你的工作来测试你的方法和你必须做的任何事情,一旦你是完成你的工作后,上下文管理器会破坏自己。

有关上下文管理器的信息,请查看contextlib