unittest 信號處理

2022-08-04 17:01 更新

3.2 版中的新功能。

unittest 的 -c/--catch 命令行選項以及 unittest.main() 的 catchbreak 參數(shù)在測試運行期間提供了對 control-C 的更友好的處理。啟用 catch break 行為后,control-C 將允許當(dāng)前正在運行的測試完成,然后測試運行將結(jié)束并報告到目前為止的所有結(jié)果。第二個 control-c 將以通常的方式引發(fā) KeyboardInterrupt。

control-c 處理信號處理程序嘗試與安裝自己的 signal.SIGINT 處理程序的代碼或測試保持兼容。如果 unittest 處理程序被調(diào)用但不是已安裝的 signal.SIGINT 處理程序,即它已被被測系統(tǒng)替換并委托給它,則它調(diào)用默認(rèn)處理程序。這通常是替換已安裝處理程序并委托給它的代碼的預(yù)期行為。對于需要禁用 unittest control-c 處理的單個測試,可以使用 removeHandler() 裝飾器。

框架作者有一些實用功能可以在測試框架中啟用 control-c 處理功能。

?unittest.installHandler()?

安裝 control-c 處理程序。當(dāng)收到 signal.SIGINT 時(通常是響應(yīng)用戶按下 control-c),所有注冊的結(jié)果都會調(diào)用 stop()。

?unittest.registerResult(result)?

注冊一個 TestResult 對象以進行 control-c 處理。注冊結(jié)果會存儲對它的弱引用,因此它不會阻止結(jié)果被垃圾收集。

如果未啟用 control-c 處理,則注冊 TestResult 對象沒有副作用,因此測試框架可以無條件地注冊它們創(chuàng)建的所有結(jié)果,而與是否啟用處理無關(guān)。

?unittest.removeResult(result)?

刪除已注冊的結(jié)果。一旦結(jié)果被刪除,將不再在該結(jié)果對象上調(diào)用 stop() 以響應(yīng) control-c。

?unittest.removeHandler(function=None)?

當(dāng)不帶參數(shù)調(diào)用此函數(shù)時,如果已安裝 control-c 處理程序,則該函數(shù)將刪除它。此函數(shù)也可以用作測試裝飾器,以在執(zhí)行測試時臨時刪除處理程序:

@unittest.removeHandler
def test_signal_handling(self):
    ...


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號