[英]How to check if code goes inside of except block using unittest in Python
我一直試圖編寫一個測試用例,以檢查代碼是否在except
塊內。
我的方法foo()
在發生異常的情況下不會拋出/引發它,它只會記錄信息。
我嘗試使用assertRaises,但是后來我意識到這對我不起作用,因為我沒有提出異常。
在Python文檔中,明確指出:
測試是否使用還傳遞給assertRaises()的任何位置或關鍵字參數調用callable時引發了異常。 如果引發異常,則測試通過;如果引發另一個異常,則測試通過;如果未引發異常,則測試通過。
所以,如果我有以下方法:
def foo():
try:
# Something that will cause an exception
except AttributeError:
log.msg("Shit happens")
是否有可能編寫一個測試用例,以測試執行是否在except塊內進行?
您無法按照自己的方式進行操作。 Python在各處引發和處理異常-例如,通過引發和處理StopIteration
退出每個for
循環。 因此,斷言某個地方存在異常,即使已處理該異常,也幾乎總是會通過。
您可以做的是模擬記錄器,如下所示:
_logs = []
def mocklog(str):
_logs.append(str)
mymodule.log = mocklog
mymodule.foo()
assertEqual(_logs, ['Shit happens'])
當然,在現實生活中的項目中,您可能希望使用模擬庫,而不是像這樣手動破解它,但這應該可以證明這個想法。
您可以像這樣使用assertRaises( https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises ):
with self.assertRaises(Exception):
foo()
如果要測試日志記錄,則還有一個assertLogs方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.