unittest 信號(hào)處理

2022-08-04 17:01 更新

3.2 版中的新功能。

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

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

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

?unittest.installHandler()?

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

?unittest.registerResult(result)?

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

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

?unittest.removeResult(result)?

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

?unittest.removeHandler(function=None)?

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)