我有以下要测试的 python 代码:
def find_or_make_logfolder(self):
if not path.isdir(self.logfolder):
try:
makedirs(self.logfolder)
except OSError:
if not path.isdir(self.logfolder):
raise
我想在我的单元测试中做类似下面的事情。
def test_find_or_make_logfolder_pre_existing(self):
with self.assertRaises(OSError):
makedirs(self.logfolder)
find_or_make_logfolder()
但是,if not path.isdir(self.logfolder):
正在检查目录是否已经存在,因此 except OSError
只会在某些情况下被抛出程序或人员在 if
之后和 try
之前几毫秒成功创建目录的边缘情况。
我该如何测试这个,或者我真的需要测试这个吗?
当覆盖率显示为 100% 时,我倾向于喜欢它。
mock
库是实现 100% 覆盖率的必备工具。
模拟make_dirs()
函数并设置side_effect
在上面:
side_effect allows you to perform side effects, including raising an exception when a mock is called
from mock import patch # or from unittest import mock for python-3.x
@patch('my_module.makedirs')
def test_find_or_make_logfolder_pre_existing(self, makedirs_mock):
makedirs_mock.side_effect = OSError('Some error was thrown')
with self.assertRaises(OSError):
makedirs(self.logfolder)
我是一名优秀的程序员,十分优秀!