簡體   English   中英

如何在Python中使用unittest來檢查代碼是否在除了塊之外

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM