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