新四季網

一種單元測試自動化方法

2023-06-11 09:20:16

專利名稱:一種單元測試自動化方法
技術領域:
本發明涉及單元測試領域,特別是一種單元測試自動化方法。
背景技術:
單元測試是集中對由原始碼實現的每一個程序單元進行測試,檢查各個程序模塊是否正確地實現了規定的功能。單元測試檢查每一個控制結構的分支以確保完全覆蓋和最大可能的錯誤檢查。
目前,一般通過在程序代碼中增加測試代碼、編寫大量的樁函數和驅動函數的方法來完成單元測試。這種方法最大的問題就是需要修改大量的程序代碼,而且測試過程不能自動化,測試的執行效率非常低。
單元測試是為了儘可能多的發現程序的錯誤,發現錯誤後,為了修正錯誤,是需要對程序代碼進行修改的。每當程序代碼被修改的時候,程序配置的某些方面(如文檔或者數據)也會被修改。回歸測試是對修改過的程序再重新測試一遍,以保證修改是正確的,同時保證所做的修改不會帶來不可預料的行為或者新的錯誤。
由於測試過程不能自動進行,因此對於錯誤修改後的回歸測試過程就會十分繁瑣。必需將測試正確的測試用例再重新測試一遍,以確保修改是正確的,並且沒有引入其他的錯誤。
對於一些難以模擬的情況,如內存分配失敗時,因為根本無法執行到這些代碼,所以其對應的代碼處理分支在單元測試時就難以覆蓋了。
測試完成,發布版本的時候,還需要從程序代碼中刪除大量的測試代碼,這個過程往往複雜而且極易出錯。
綜上所述,測試過程的自動化將成為單元測試發展的方向。

發明內容
有鑑於此,本發明的目的在於提供一種單元測試自動化方法,實現單元測試過程的自動化,提高單元測試的效率。
為了達到上述目的,本發明提供了一種單元測試自動化方法,其特徵在於通過測試腳本文件控制被測試程序單元,包含以下步驟A、測試腳本文件控制單元測試輔助模塊;B、單元測試輔助模塊控制被測試程序單元。
步驟A進一步包括A1、腳本解釋器解釋執行測試腳本文件中的程序代碼,根據程序代碼的行為向數據交換文件中寫入設置數據;A2、單元測試輔助模塊中的功能函數由被測試程序單元調用,單元測試輔助模塊中的功能函數讀取數據交換文件中的設置數據,通過設置數據控制重新定義的關鍵字(如if語句)和函數的執行結果。
B進一步包括B1、被測試程序單元調用單元測試輔助模塊中的功能函數;B2、單元測試輔助模塊中的功能函數通過重新定義的關鍵字或函數控制被測試程序單元。
單元測試輔助模塊中的功能函數包括測試用樁函數和驅動函數。
較佳地,該方法進一步包括測試腳本文件通過延時控制設置數據生效的時間。
測試腳本文件可引用動態連接庫中的函數。測試腳本文件與被測試程序單元進行信息交互,根據測試腳本文件引用的動態連接庫函數,選擇測試腳本文件當前程序代碼後面的程序代碼分支。
本發明通過將測試用樁函數和驅動函數封裝成一個通用獨立的單元測試輔助模塊,並通過測試腳本文件控制樁函數和驅動函數,從而控制被測試程序單元。更進一步地,對於一些難以模擬的分支的覆蓋(如內存分配失敗),可以通過控制被測試程序單元進入不同的運行流程來實現。提高了單元測試的執行效率,實現了單元測試過程的自動化,使單元測試簡單通用;回歸測試時,只需使用該測試腳本文件重新進行測試即可,大大簡化了回歸測試,降低了單元測試的成本。針對同一單元測試的測試腳本文件可以重複使用,不管是否由同一測試人員進行測試。


圖1示出了依據本發明的測試腳本文件控制被測試程序單元的示意圖。
具體實施例方式
為了使本發明的目的、技術方案和優點更加清楚,下面結合附圖對本發明作進一步地詳細描述。
圖1示出了依據本發明的測試腳本文件控制被測試程序單元的示意圖,如圖1所示進行單元測試時,測試系統主要分為如下幾個部分測試腳本文件101、腳本解釋器102、數據交換文件103、單元測試輔助模塊105和被測試程序單元104。其中單元測試輔助模塊105和被測試程序單元104組成了被測試系統106。本發明是將測試的驅動函數和樁函數封裝成一個通用獨立的單元模塊,即單元測試輔助模塊105。
測試腳本文件101是一個文本文件,文件中包含了一些採用C語言編寫的程序代碼。用戶根據測試所要實現的目的編寫測試腳本文件101中的程序代碼。測試腳本文件101還可以引入其他動態連接庫中的函數,因此測試腳本文件101可實現靈活的功能,並且具有很強的可擴展性。例如,測試腳本文件101可通過延時來控制各類設置數據生效的時間間隔。又如,測試腳本文件101還可以通過調用外部動態連接庫中的函數來和被測試程序單元104進行信息交換,從而根據不同的情況來決定測試腳本文件101中當前程序代碼後面的程序代碼的行為,比如執行測試腳本文件101中的哪一個分支。
腳本解釋器102負責對測試腳本文件101進行解釋和執行工作。腳本解釋器102在讀取測試腳本文件101後,逐條語句執行。在執行過程中,腳本解釋器102依據執行結果,向數據交換文件103中寫入一些設置數據,如設置某條if語句執行結果為false,設置某行new操作返回值為空等。
被測試程序單元104調用單元測試輔助模塊105中的功能函數,單元測試輔助模塊105中的功能函數讀取數據交換文件103中的設置數據,通過設置數據控制重新定義的關鍵字和函數的執行結果,從而由單元測試輔助模塊105控制被測試程序單元104。
單元測試輔助模塊105控制被測試程序單元104的行為主要是通過重新定義各類主要關鍵字和函數來實現的。重新定義哪些關鍵字和哪些函數完全是根據測試需要來決定的,可以進行任意的擴展。
例如,測試過程中需要重新定義if語句,以達到控制if語句執行分支的目的,那麼,可以對if語句(關鍵字)進行如下重新定義#define if(x)if(IfForUT(_FILE_,_LINE_,bool(x)))其中,IfForUT是自定義的一個函數,其函數形式如下bool IfForUT(LPCSTR lpszFileName,int nLine,bool bCondition);IfForUT函數中就可以從數據交換文件中讀取設置數據,如果用戶設置lpszFileName所指的文件中的nLine行語句要返回false,則IfForUT直接返回false。如果沒有設置,IfForUT函數返回bCondition的值,也就是使if語句按其原有的行為執行。
再如,測試過程中希望模擬new操作失敗,但又不希望修改被測試程序單元,那麼,可以將new操作符進行重新定義#define new DEBUG_NEW#define DEBUG_NEW new(THIS_FILE,_LINE_)void*operator new(size_t nSize,LPCSTR lpszFileName,int nLine)在自定義的new操作中就可以從數據交換文件中讀取設置數據,根據用戶在腳本文件中的設置來判斷lpszFileName所指的文件中的nLine行的內存申請操作是否返回失敗。這樣就達到了模擬實際情況下幾乎不可能模擬的內存分配失敗的情況,而內存分配失敗後的代碼處理分支也就可以順利地進行測試了。
再舉例說明重新定義函數的情況。
在測試過程中希望對DBLibrary提供的函數dbcmd的執行結果(返回值)進行控制,那麼可定義如下宏#define dbcmd(dbproc,cmdstring)dbcmdForUT(_FILE_,_LINE_,dbproc,cmdstring)再定義函數dbcmdForUT在dbcmdForUT函數中,類似前面舉例說明的,可根據用戶在腳本文件中的設置來確定lpszFileName所指文件中nLine行調用dbcmd函數時應該返回什麼值。
這種方式對於單元測試中不同程序分支的測試可以實現完全自動化,可以使測試覆蓋一些難以模擬的程序分支。而且用戶可以在不同時間設置同一條語句返回不同的執行結果,這樣就可以控制被測試程序單元104進入不同的運行流程。因此,可以在一次自動測試過程中,完成所有分支的測試。
測試所用的腳本文件101是可以重複使用的。在修改代碼後,只需要將測試所用的腳本文件101重新執行一次,就可以完成回歸測試,極大地提高了單元測試效率。
單元測試輔助模塊105是否編譯、加載完全通過宏定義來控制。因此,在單元測試結束後,只需要去掉宏,就可以完全卸載單元測試輔助模塊105了,卸載後不會對發布版本的編譯和執行產生任何影響。
總之,以上所述僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍。
權利要求
1.一種單元測試自動化方法,其特徵在於通過測試腳本文件控制被測試程序單元,包含以下步驟A、測試腳本文件控制單元測試輔助模塊;B、單元測試輔助模塊控制被測試程序單元。
2.如權利要求1所述的單元測試自動化方法,其特徵在於所述的步驟A進一步包括A1、腳本解釋器解釋執行測試腳本文件中的程序代碼,根據程序代碼的行為向數據交換文件中寫入設置數據;A2、單元測試輔助模塊中的功能函數由被測試程序單元調用,單元測試輔助模塊中的功能函數讀取數據交換文件中的設置數據,通過設置數據控制重新定義的關鍵字和函數的執行結果。所述的步驟B進一步包括B1、被測試程序單元調用單元測試輔助模塊中的功能函數;B2、單元測試輔助模塊中的功能函數通過重新定義的關鍵字或函數控制被測試程序單元。
3.如權利要求2所述的單元測試自動化方法,其特徵在於所述的單元測試輔助模塊中的功能函數包括測試用樁函數和驅動函數。
4.如權利要求1所述的單元測試自動化方法,其特徵在於該方法進一步包括所述的測試腳本文件通過延時控制設置數據生效的時間。
5.如權利要求1所述的單元測試自動化方法,其特徵在於所述的測試腳本文件可引用動態連接庫中的函數。
6.如權利要求7所述的單元測試自動化方法,其特徵在於該方法進一步包括所述的測試腳本文件與被測試程序單元進行信息交互,根據測試腳本文件引用的動態連接庫函數,選擇測試腳本文件當前程序代碼後面的程序代碼分支。
全文摘要
本發明公開了一種單元測試自動化方法,通過腳本文件控制被測試程序單元,其步驟為測試腳本文件控制單元測試輔助模塊;單元測試輔助模塊控制被測試程序單元。腳本解釋器解釋執行測試腳本文件中的程序代碼,根據程序代碼的行為向數據交換文件中寫入設置數據;被測試程序單元調用單元測試輔助模塊中的功能函數;單元測試輔助模塊中的功能函數讀取數據交換文件中的設置數據,通過設置數據控制重新定義的關鍵字和函數的執行結果;單元測試輔助模塊中的功能函數通過重新定義的關鍵字或函數控制被測試程序單元。從而提供通用簡單的自動化單元測試過程,以實現提高單元測試的執行效率,方便回歸測試,降低單元測試成本的目的。
文檔編號G06F11/36GK1499374SQ0214671
公開日2004年5月26日 申請日期2002年11月4日 優先權日2002年11月4日
發明者黃勇, 黃 勇 申請人:華為技術有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀