[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.