一種單元測試方法和裝置制造方法
【專利摘要】本發明涉及一種單元測試方法和裝置。該方法包括:封裝用于全局調用的測試類,其中,測試類中包括功能函數、結果展示函數;通過調用功能函數,創建針對被測程序的測試數據;通過執行測試數據來對被測程序進行單元測試;以及通過調用結果展示函數,展示測試結果。本發明通過封裝可以全局調用的測試類來創建測試用例,進一步地可以封裝單例模式的測試類來創建測試用例,提高了測試的靈活性、安全性和測試性能,節省了內存空間,降低了測試的依賴性。本發明可以對測試過程中產生的測試結果進行存儲,增強了測試結果的可存儲性。本發明可以采用命令行方式和網頁方式展示測試結果,增加了測試結果展示的多樣性。
【專利說明】一種單元測試方法和裝置【技術領域】
[0001]本發明涉及計算機測試【技術領域】,更具體地涉及一種單元測試方法和裝置。
【背景技術】
[0002]單元測試是開發者通過編寫的一小段代碼來檢驗被測程序的一個很小、很明確的功能是否正確的行為。
[0003]目前,PHP語言以及其他語言的單元測試方案,主要有兩種方式。
[0004]第一種方式是在被測程序中添加判斷語句或斷言語句進行單元測試。在執行被測程序時,如果被測程序的執行結果不符合判斷語句或斷言語句的預期,則拋出異常或者報警等提示。但是通過該方式編寫的測試用例屬于一次性測試,不能夠重復利用,使用靈活性較低。并且使用判斷語句或斷言語句所得到的執行結果只能用于展示,而無法保存結果。而且使用判斷語句或斷言語句在管理上頗為不便,如果在正式環境上執行判斷語句或斷言語句,會產生不好的用戶體驗,還會泄露被測程序的細節,產生安全隱患。
[0005]第二種方法是借助PHPUnit等單元測試框架來編寫測試用例。PHPUnit是一個大型的PHP單元測試框架。編寫單元測試用例的方式是,編寫一個類,該類要繼承PHPUnit_Framework_Testcase基類。在 該類下編寫測試用例,并且通過執行PHPUnit命令來執行單元測試。但是,編寫的所有測試用例,都要繼承PHPUnit_Framework_Testcase基類,依賴性較強,否則在執行單元測試過程中無法使用其提供的功能。而且執行單元測試只能使用PHPUnit提供的PHPunit命令,才能夠執行對應的測試用例。PHPunit單元測試框架巨大,要使用的話,需要開發者安裝眾多擴展來實現單元測試。
【發明內容】
[0006]鑒于上述問題,提出了本發明以提供一種單元測試方法和裝置,以增加單元測試的靈活性和可存儲性、提高測試代碼的安全性、降低單元測試的依賴性。
[0007]為了解決上述技術問題,本發明的目的是通過以下技術方案實現:
[0008]本發明提供了一種單元測試方法,包括:封裝用于全局調用的測試類,其中,所述測試類中包括功能函數、結果展示函數;通過調用所述功能函數,創建針對被測程序的測試數據;通過執行所述測試數據來對所述被測程序進行單元測試;以及通過調用所述結果展示函數,展示測試結果。
[0009]其中,封裝用于全局調用的測試類,包括:封裝單例模式的測試類。
[0010]其中,所述結果展示函數包括以下中的一個或多個:命令行展示函數、網頁展示函數。
[0011]其中,通過調用所述結果展示函數展示測試結果,包括:如果調用命令行展示函數,則在命令行中展示所述測試結果;如果調用網頁展示函數,則在網頁中展示所述測試結果O
[0012]其中,通過調用所述功能函數,創建針對被測程序的測試數據,包括:通過調用所述功能函數,創建針對被測程序的mock測試數據,以對所述被測程序中的不確定性數據進行單元測試。
[0013]其中,通過執行所述測試數據來對所述被測程序進行單元測試,還包括:記錄所述被測程序的測試過程以確定對所述被測程序進行測試的覆蓋率。
[0014]其中,通過執行所述測試數據來對所述被測程序進行單元測試,包括:在執行所述測試數據的過程中,記錄所述被測程序中不符合預期的語句。
[0015]本發明還提供了一種單元測試裝置,包括:封裝模塊,用于封裝用于全局調用的測試類,其中,所述測試類中包括功能函數、結果展示函數;創建模塊,用于通過調用所述功能函數,創建針對被測程序的測試數據;測試模塊,用于通過執行所述測試數據來對所述被測程序進行單元測試;以及展示模塊,用于通過調用所述結果展示函數,展示測試結果。
[0016]其中,封裝模塊還被配置成:封裝單例模式的測試類。
[0017]其中,所述結果展示函數包括以下中的一個或多個:命令行展示函數、網頁展示函數。
[0018]其中,所述展示模塊還被配置成:如果調用命令行展示函數,則在命令行中展示所述測試結果;如果調用網頁展示函數,則在網頁中展示所述測試結果。
[0019]其中,所述創建模塊還被配置成:通過調用所述功能函數,創建針對被測程序的mock測試數據,以對所述被測程序中的不確定性數據進行單元測試。
[0020]其中,測試模塊還被配置成:記錄所述被測程序的測試過程以確定對所述被測程序進行測試的覆蓋率。
[0021]其中,測試模塊還被配置成:在執行所述測試數據的過程中,記錄所述被測程序中不符合預期的語句。
[0022]與現有技術相比,根據本發明的技術方案存在以下有益效果:
[0023]本發明通過封裝可以全局調用的測試類來創建測試用例,進一步地可以封裝單例模式的測試類來創建測試用例,提高了測試的靈活性、安全性和測試性能,節省了內存空間,降低了測試的依賴性。
[0024]本發明可以對測試過程中產生的測試結果進行存儲,增強了測試結果的可存儲性。因為測試類以靜態內存的方式存在,所有的測試用例共用一份內存空間,極大地提高了內存的使用率,節省內存空間。
[0025]本發明可以采用命令行方式和網頁方式展示測試結果,增加了測試結果展示的多樣性。
[0026]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0027]通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0028]圖1是根據本發明一實施例的單元測試方法的流程圖;[0029]圖2a和圖2b分別是根據本發明實施例的測試結果展示示意圖;以及
[0030]圖3是根據本發明一實施例的單元測試裝置的結構圖。
【具體實施方式】
[0031]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
[0032]本發明的主要思想在于,封裝可以全局調用的測試類,在創建測試用例時,通過調用測試類中的成員函數來達到單元測試的效果。其中,測試類可以是單例模式的測試類。在測試類中定義了用于結果展示的函數,該結果展示函數包括可以在命令行中展示測試結果的函數和可以在網頁中展示測試結果的函數。
[0033]在該方式中,通過調用測試類創建的測試用例可以在任何地方使用,不依賴于專門的測試環境。在需要測試時,調用測試類就可以實現對被測程序的單元測試,在使用上靈活方便。進一步地,該方式可以在命令行中展示測試結果也可以在網頁中展示測試結果,兩種展示測試結果的方式效果和功能完全相同,方便開發人員使用。更進一步地,該方式具有可拓展性,可以在測試類中加入代碼覆蓋率統計、mock等功能。
[0034]為使本發明的目的、技術方案和優點更加清楚,下面將結合本發明具體實施例及相應的附圖對本發明技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0035]如圖1所示,圖1是根據本發明一實施例的單元測試方法的流程圖。
[0036]在步驟SllO處,封裝用于全局調用的測試類。其中,測試類中包括功能函數、結果展示函數。
[0037]測試類指用于單元測試的類。類(Class )表示對現實生活中一類具有共同特征的對象的抽象。該對象可以是測試用例。測試用例(Test Case)是為某個目標而編制的一組測試輸入、執行條件以及預期結果,以便測試被測程序(測試輸入)路徑或核實被測程序是否滿足某個特定需求。
[0038]在一個實施例中,可以封裝單例模式的測試類。該單例模式的測試類可以全局訪問,提高了使用的靈活性和安全性。調用該單例模式的測試類創建的測試用例在內存中只存在一個實例化的測試用例。這樣,可以節省內存空間,避免頻繁的創建銷毀對象,提高了內存使用率,從而提高了測試性能。并且創建的測試用例以靜態方式存在,使開發人員可以在其他程序中,隨時調用測試API來對被測程序進行測試。
[0039]具體而言,可以在封裝測試類之前,設計該測試類的統一建模語言(UnifiedModel Language, UML)圖,該UML圖可以用于對大規模,復雜對象進行建模,特別是對軟件架構層次建模。該UML圖可以用圖表的方式表現出來。
[0040]進一步地,單元測試的職能可以包括創建新的測試用例,通過判斷語句或斷言語句判斷被測程序的結果,結果展示。根據單元測試的職能可以設計出測試類的UML圖。該UML圖可以如表I所不,但不限于表I中的內容:[0041]表1:
【權利要求】
1.一種單元測試方法,其特征在于,包括: 封裝用于全局調用的測試類,其中,所述測試類中包括功能函數、結果展示函數; 通過調用所述功能函數,創建針對被測程序的測試數據; 通過執行所述測試數據來對所述被測程序進行單元測試;以及 通過調用所述結果展示函數,展示測試結果。
2.根據權利要求1所述的方法,其特征在于,封裝用于全局調用的測試類,包括:封裝單例模式的測試類。
3.根據權利要求1所述的方法,其特征在于: 所述結果展示函數包括以下中的一個或多個:命令行展示函數、網頁展示函數。
4.根據權利要求3所述的方法,其特征在于,通過調用所述結果展示函數展示測試結果,包括: 如果調用命令行展示函數,則在命令行中展示所述測試結果; 如果調用網頁展示函數,則在網頁中展示所述測試結果。
5.根據權利要求1所述的方法,其特征在于,通過調用所述功能函數,創建針對被測程序的測試數據,包括: 通過調用所述功能函數,創建針對被測程序的mock測試數據,以對所述被測程序中的不確定性數據進行單元測試。
6.根據權利要求1所述的方法,其特征在于,通過執行所述測試數據來對所述被測程序進行單元測試,還包括:記錄所述被測程序的測試過程以確定對所述被測程序進行測試的覆蓋率。
7.根據權利要求1所述的方法,其特征在于,通過執行所述測試數據來對所述被測程序進行單元測試,包括: 在執行所述測試數據的過程中,記錄所述被測程序中不符合預期的語句。
8.—種單元測試裝置,其特征在于,包括: 封裝模塊,用于封裝用于全局調用的測試類,其中,所述測試類中包括功能函數、結果展示函數; 創建模塊,用于通過調用所述功能函數,創建針對被測程序的測試數據; 測試模塊,用于通過執行所述測試數據來對所述被測程序進行單元測試;以及 展示模塊,用于通過調用所述結果展示函數,展示測試結果。
9.根據權利要求8所述的裝置,其特征在于,封裝模塊還被配置成:封裝單例模式的測試類。
10.根據權利要求8所述的裝置,其特征在于: 所述結果展示函數包括以下中的一個或多個:命令行展示函數、網頁展示函數。
【文檔編號】G06F11/36GK103617120SQ201310653284
【公開日】2014年3月5日 申請日期:2013年12月5日 優先權日:2013年12月5日
【發明者】李炳燁 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司