如何对失败的文件删除进行单元测试?
How to unit-test for failed file deletion?
我的代码中有一个 os.remove()
,有时在本地 运行 时,由于 OSError 13 - Permission Denied
而失败 - 因此我设置了 try-except
。我的自动化测试 (Travis CI) 在 Linux VM 实例上 运行,所以我不知道如何让 os.remove
失败以覆盖。
我有哪些选择 - 如何强制执行 except
块?或者,如何使用 Python?
删除保护文件
注意:在调用测试方法之前在测试代码中删除它不是一个选项;该方法本身获取要删除的文件:
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
我的代码中有一个 os.remove()
,有时在本地 运行 时,由于 OSError 13 - Permission Denied
而失败 - 因此我设置了 try-except
。我的自动化测试 (Travis CI) 在 Linux VM 实例上 运行,所以我不知道如何让 os.remove
失败以覆盖。
我有哪些选择 - 如何强制执行 except
块?或者,如何使用 Python?
注意:在调用测试方法之前在测试代码中删除它不是一个选项;该方法本身获取要删除的文件:
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