如何在Python中测试创建目录的函数?你能给出一个例子make_directory_test()
函数吗?
def make_directory(directory):
if not os.path.exists(directory):
os.makedirs(directory)
答案 0 :(得分:3)
只测试该目录是否存在
def test_make_directory(self):
directory_path = '...' # somepath
make_directory(directory_path)
self.assertTrue(os.path.exists(directory_path))
确保在tearDown
或setUp
中的每次测试后删除在单元测试中创建的任何目录,以确保测试的独立性
答案 1 :(得分:2)
这里的一个好习惯是学习如何使用mock或flexmock等测试框架
此外,您应该使用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