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): ...
更多建議: