讓我們來看一個很簡單的示例,從而大致了解單元測試程序包的內容。假設我已經創建了一個關于 SUBSTR 的封裝,答應在開始和結束點之間請求一個子串(一個簡單的函數)(列表 1)。 即使是簡單的或看似不重要的程序(如 betwnStr)也需要測試 — 而實際上我必須考慮大量的測試方案(包括 NULL 開始值、NULL 結束值以及開始大于結束等)。列表 2 顯示了測試程序包的一部分(全部測試包的內容請參見 ut_betwnstr.pkb)。關于要害部分的解釋,請參見表 1. 也許您會想,“多么單調乏味!我真的必須編寫所有那些代碼,只是為了測試這個簡單的函數嗎?”實際上,那些在測試領域工作的人都知道,測試一個應用程序所需要編寫的代碼數量經常比應用程序本身更多。對于這個特定的程序包和測試代碼的 utPLSQL 風格,您在某些情況下會生成全部的測試代碼。實際上,ut_betwnstr 程序包通過對 utGen.testpkg_from_string 過程的調用而生成,如列表 3 所示。 即使您不生成測試程序包,也經常可以找到其他方法,利用最少的代碼運行許多基于 utPLSQL 的測試 — 這正是我用 Codecheck 所做的工作。 將 utPLSQL 應用于 Codecheck 要利用 utPLSQL,我需要構建一個單元測試程序包并調用 utAssert 程序,以確定我的代碼是否通過其測試。但是,在進行這些操作之前,我需要精心制作我的測試方案。請記住:測試方案第一,其次才是代碼。 現在應該尋找靈感,暫停前進,考慮一下我所提供的實用工具。我希望它能夠驗證什么?那些能編譯但包含歧義超載的程序包的特例是什么?我能檢測到什么情況?有效超載的示例是什么?究竟我需要測試正面和負面的因素。經過一段時間以后,我給出以下的內容: 有效的超載 兩個超載程序帶有不同數量的非缺省參數。 兩個超載程序帶有相同數量的非缺省參數,并在數據類型方面具有足夠的差別(如 NUMBER 對 DATE)。 函數和過程具有相同名稱和參數列表,包括不帶參數的情況。區分這兩者并沒有問題,因為它們在代碼中的使用方法不同。 無效的超載 兩個超載程序具有不同數量的非缺省參數,導致歧義的參數列表。 兩個程序具有單個參數,數據類型相同但參數名不同。 兩個程序具有相同的名稱,具有單個參數,但卻是同系列中不同的數據類型。新聞熱點
疑難解答