如何测试python中提供的os
模块方法。例如,您将如何测试os.mkdir
的使用?
def create_folder(self):
os.mkdir("/parentFolder/newFolder")
什么可以用来测试这种方法?
此方法将具有测试用例,例如
验证文件夹是否已创建
权限不足,无法创建文件夹
空间不足,无法创建文件夹
当单元测试create_folder
时,你不测试os.mkdir
。这有两个原因:
-
它是外部库(在本例中为标准库,但第三方库也是如此)的一部分,因此应由该库的测试套件涵盖;和
-
即使它是代码库的一部分,它也与被测试的单元不同。
此外,值得注意的是,正如 user2393256 的答案所证明的那样,您对此的测试可能会使用同一外部库中的其他功能 - 如果测试失败,您是否得出结论os.mkdir
不起作用或os.path.isdir
不起作用?
从测试create_folder
的角度来看,真正重要的是它与该函数正确交互。我会嘲笑os.mkdir
(例如使用unittest.mock
),并检查是否正在使用适当的路径调用它。您还可以更改模拟的返回值和副作用,允许您模拟权限或空间不足等情况,并测试应用对此的响应,而无需以某种方式设置该环境。在测试调用create_folder
的其他功能单元时,我会完全模拟create_folder
,因为它是一个经过测试和信任的单元。
除了单元测试之外,您还将进行一定程度的集成测试,以确保应用程序的所有部分正确协同工作。此时,您将测试整体功能,例如,您可以保存文件,然后重新加载它,而不是像"文件夹是否已创建?
最后,特别是对于标准库功能,你必须对语言本身进行测试(即使不是直接的,至少已经被成千上万的程序已经使用它!)并且工作有一定程度的信任。
要检查目录是否已创建,您可以使用
os.path.isdir()
至于许可:有一个蟒蛇成语说
请求宽恕比请求许可更容易
在这种情况下,我会尝试创建文件夹并捕获可能引发的异常。