單元測試框架 - 訊號處理



unittest 的 -c/--catch 命令列選項以及 **catchbreak** 引數提供了在測試執行期間更有效的 Control-C 處理方式。啟用 catch break 行為後,Control-C 將允許當前正在執行的測試完成,然後測試執行將結束並報告到目前為止的所有結果。第二次 Control-C 將以通常的方式引發 KeyboardInterrupt。

如果呼叫了 unittest 處理程式但未安裝 signal.SIGINT 處理程式,則它將呼叫預設處理程式。對於替換已安裝處理程式並委派給它的程式碼,這通常是預期的行為。對於需要停用 unittest Control-C 處理的單個測試,可以使用 removeHandler() 裝飾器。

以下實用函式在測試框架中啟用 Control-C 處理功能:

unittest.installHandler()

安裝 Control-C 處理程式。當收到 **signal.SIGINT** 時,所有已註冊的結果都會呼叫 TestResult.stop()。

unittest.registerResult(result)

註冊一個 **TestResult** 物件以進行 Control-C 處理。註冊結果會儲存對其的弱引用,因此它不會阻止結果被垃圾回收。

unittest.removeResult(result)

刪除已註冊的結果。刪除結果後,將不再對該結果物件呼叫 TestResult.stop() 以響應 Control-C。

unittest.removeHandler(function = None)

在不帶引數呼叫時,此函式將刪除已安裝的 Control-C 處理程式。此函式也可以用作測試裝飾器,以便在執行測試時臨時刪除處理程式。

GUI 測試執行器

安裝 unittest 模組以互動方式發現和執行測試。此實用程式(一個 Python 指令碼“inittestgui.py”)使用 Tkinter 模組,這是一個 Python 的 TK 圖形工具包埠。它提供了一個易於使用的 GUI 來發現和執行測試。

Python unittestgui.py

Running Test

單擊“發現測試”按鈕。將出現一個小的對話方塊,您可以在其中選擇要從中執行測試的目錄和模組。

Discover Test

最後,單擊“開始”按鈕。將從選定的路徑和模組名稱發現測試,結果窗格將顯示結果。

Result Pane

要檢視單個測試的詳細資訊,請選擇結果框中的測試並單擊它:

Individual Test Details

如果在 Python 安裝中找不到此實用程式,您可以從專案頁面獲取它 http://pyunit.sourceforge.net/

類似地,基於 wxpython 工具包的實用程式也在那裡提供。

廣告