我的代码中有一个os.remove()
,有时在本地运行时由于OSError 13 - Permission Denied
而失败-因此,我设置了一个try-except
。我的自动化测试(Travis CI)在Linux VM实例上运行,因此出于覆盖目的,我不知道如何使os.remove
失败。
我有哪些选择-如何强制执行except
块?另外,如何使用Python删除文件保护?
Note:不能选择在调用测试方法之前将其从测试代码中删除;该方法本身获取要删除的文件:
from pathlib import Path
paths = [str(x) for x in Path("directory/").iterdir() if 'abc' in x.stem]
if len(paths) > 0: # if files are removed beforehand, len(paths) == 0
try:
[os.remove(p) for p in paths]
except:
pass # stuff here
您可以使用unittest.mock.patch
修补os.remove
并将OSError
指定为side_effect
:
from unittest.mock import patch
...
with patch('os.remove') as mock_remove:
mock_remove.side_effect = OSError('Permission Denied')
try:
[os.remove(p) for p in paths]
except OSError as e:
pass # handle error here