Gtest單元測試_第1頁
Gtest單元測試_第2頁
Gtest單元測試_第3頁
Gtest單元測試_第4頁
Gtest單元測試_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Googletest框架和單元測試杭州 2011.10.12 內容 Googletest 框架 單元測試(Unit Testing) Googletest 框架 u Googletest 背景u xUnit簡介u Googletest 特性u Googletest 環(huán)境搭建u Googletest 使用 1.1 Googletest 背景 Googletest是Googletest針對C+測試的開源項目,跨平臺(Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian)。 基于xUnit框架,有豐富的斷言,自定義斷言,事件機制,deat

2、h 測試,參數(shù)化測試,XML測試報告等。 應用案例:l Chromium projects (谷歌瀏覽器)l LLVM (Low Level Virtual Machine)l ProtocalBuffers (類似XML數(shù)據(jù)描述語言) 1.2 xUnit簡介 每個測試依次執(zhí)行的4個不同階段:1、建立測試夾具(Fixture) ;2、與SUT(System Under Test)交互;3、驗證結果;4、拆卸測試Fixture,返回初始狀態(tài)。 測試 套件 對象 創(chuàng)建 創(chuàng)建 創(chuàng)建 測試 用例類 測試用 例對象 SUT 執(zhí)行 執(zhí)行 夾具 testMethod_n testMethod_1 testM

3、ethod_n 運行 套件 建立 執(zhí)行 驗證 拆卸 測試運行器 1.3 Googletest 特性 u 斷 言u 事件機制u 參數(shù)化測試u 運行參數(shù)u death測試 斷言宏分類: (1) ASSERT_*系列:檢查點失敗時,推出當前函數(shù) (2) EXPECT_*系列:檢查點失敗時,繼續(xù)往下執(zhí)行 1.3.1 斷 言 布爾值檢查布爾值檢查數(shù)值型檢查數(shù)值型檢查 字符串檢查字符串檢查浮點型檢查浮點型檢查 當斷言檢查出錯時輸出的信息并不能很好的幫助你還原當時出錯的狀況時,可以使用“” 操作符輸出指定內容幫助分析出錯原因。1.3.2 事件機制 Gtest事件機制分類:n 全局:發(fā)生在所有案例執(zhí)行前后n

4、TestSuite:案例中所有案例執(zhí)行前后n TestCase: 單個案例前后 全局事件全局事件 要實現(xiàn)全局事件,必須寫一個類,繼承testing:Environment類,實現(xiàn)里面的SetUp和TearDown方法。1. SetUp()方法在所有案例執(zhí)行前執(zhí)行2. TearDown()方法在所有案例執(zhí)行后執(zhí)行 TestSuite事件事件 需要實現(xiàn)一個類,繼承testing:Test,然后實現(xiàn)兩個靜態(tài)方法1. SetUpTestCase() 方法在第一個TestCase之前執(zhí)行2. TearDownTestCase() 方法在最后一個TestCase之后執(zhí)行 TestCase事件事件 Test

5、Case事件發(fā)生在每個TestCase執(zhí)行前后 1. SetUp()方法在每個TestCase執(zhí)行前執(zhí)行 2. TearDown()方法在每個TestCase執(zhí)行后執(zhí)行 當被測函數(shù)需要傳入不同的值時,可以考慮Gtest提供的參數(shù)化測試功能。 1.3.3 參數(shù)化測試 INSTANTIATE_TEST_CASE_P(param1,param2,param3)param1:任意取任意取; param2:測試案例的名稱測試案例的名稱; param3:參數(shù)生成器參數(shù)生成器 (eg:testing:Values();使用說明:使用說明: 在運行Gtest時,Gtest提供了一系列的參數(shù)可以使我們對案例的執(zhí)

6、行進行有效的控制。 1.3.4 運行參數(shù) Gtest工程產(chǎn)生exe文件圖運行輸出案例表參數(shù)圖示 測試案例集合參數(shù)測試案例集合參數(shù)參數(shù)列表參數(shù)列表 測試案例輸出參數(shù)測試案例輸出參數(shù) 測試案例異常處理參數(shù)測試案例異常處理參數(shù)1.3.5 death測試 在測試過程中,對于可能導致程序崩潰的輸入,我們可以檢查程序是否按預期的方式崩潰,驗證崩潰結果。 注意事項: 1. 不要在死亡測試里釋放內存。 2. 在父進程里再次釋放內存。 3. 不要在程序中使用內存堆檢查。 環(huán)境要求:Linux, Windows (requires MSVC 8.0 or above), Cygwin, and Mac (the

7、latter three are supported since v1.3.0). VS2008下簡單實現(xiàn)示例EXPECT_DEATH(statement, regex);1. statement是被測試的代碼語句2. regex是一個正則表達式,用來匹 配異常時在stderr中輸出的內容 EXPECT_EXIT(statement, predicate, regex)1. statement是被測試的代碼語句2. predicate 在這里必須是一個委托,接收int型參數(shù),并返回bool。 只有當返回值為true時,死亡測試案例才算通過。如果程序正常退出并且退出碼與exit_code相同則返

8、回 trueVS2008下簡單實現(xiàn)示例 Windows 下正規(guī)表達式風格:Simple風格:GTEST_USES_SIMPLE_RE=1(預處理處添加) 1.4 Googletest 環(huán)境搭建 搭建步驟: (1) 設置gtest頭文件路徑 (2) 設置gtest.lib路徑1.5 Googletest 使用 (1)創(chuàng)建單元測試工程 RUN_ALL_TESTS()宏功能:1.Saves the state of all Google Test flags. 2.Creates a test fixture object for the first test. 3.Initializes it v

9、ia SetUp(). 4.Runs the test on the fixture object. 5.Cleans up the fixture via TearDown(). 6.Deletes the fixture. 7.Restores the state of all Google Test flags. 8.Repeats the above steps for the next test, until all tests have run. (2)在待測試的類頭文件中添加gtest頭文件 (3)在待測試的類頭文件中添加測試單元聲明 此聲明實質為待測試類添加友類,下圖為gtes

10、t源碼: (4)實現(xiàn)測試案例實體和所需的事件機制 宏(TEST/TEST_F)源碼分析: (5)驗證和查看單元測試結果 單元測試(Unit Testing) u Unit Testing u 單元測試實例分析 2.1 Unit Testing 單元測試單元測試:簡單的講獨立的測試每一個函數(shù) 良好單元測試的品質良好單元測試的品質: ( 1 ) 運行速度快(0.1s); ( 2 ) 定位問題所在 以下測試不是單元測試以下測試不是單元測試: ( 1 ) 與數(shù)據(jù)庫有交互 ; ( 2 ) 進行了網(wǎng)絡通信; ( 3 ) 調用了文件系統(tǒng); ( 4 ) 需要對環(huán)境做特定的準備和配置; 關鍵:解依賴關鍵:解依賴

11、原則:源代碼在產(chǎn)品階段和測試階段應該是完全一樣原則:源代碼在產(chǎn)品階段和測試階段應該是完全一樣的的2.2 單元測試場景實例分析 在實際編寫單元測試中,在單元測試之前的一些對函數(shù)所用的初始化操作通常并不能滿足需要,常規(guī)的方法并不能解決一些復雜的問題。 例如函數(shù)中涉及到對設備sdk調用、socket通信、工程中依賴的一些第三方庫函數(shù)的引用等等。單元測試中并不需要對這些納入到測試中,我們只需要模擬這些調用產(chǎn)生的結果返回到需要測試的函數(shù)即可。 針對以上問題常用處理方法: 偽對象 接縫模型 2.2.1 偽對象偽代碼: class Sale void scan() . 調用設備SDK方法showLine()

12、; . 偽對象:指測試中用來替代單元測試環(huán)境中無法調用的對象。 圖例: 在一個POS系統(tǒng)中Sale類,其中方法Scan()顯示商品信息。 偽代碼:class Sale Display display; public Sale(Diaplay display) this.display=display; void scan() display.showLine(); 2.2.2 接縫模型 接縫(seam):在程序的一些特殊的點,可以不用修改源碼就可以達到改動代碼的行為。 每個接縫點都有一個激活點,在這些點我們可以改變代碼的行為。 接縫類型: 對象接縫 鏈接接縫 預處理期接縫(不適用,這里不做介紹

13、) 對象接縫Sale+Scan(barcode: string) 用子類去覆蓋掉基類中的。 圖例: 在一個POS系統(tǒng)中Sale類,其中方法Scan()顯示商品信息。 偽代碼: class Sale void scan() . 調用設備SDK方法showLine(); . 偽代碼: class Sale void scan() . showLine(); . virtual showLine() 調用設備SDK方法showLine(); Sale+Scan(barcode: string)+virtual ShowLine()Sale+Scan(barcode: string)+virtual ShowLine()ChildSale+ShowLine()鏈接接縫 C+及很多語言在代碼編譯后,我們是可以在其鏈接期時改變其行為的。 預編譯編 譯 匯 編源程序 鏈鏈 接接 展開宏 處理條件編譯指令處理條件編譯指令 處理預編譯指令 刪除注釋、加標識 . . . . . 詞法分析 語法分析 語義分析 優(yōu)化匯編代碼 . . . . . 匯編碼譯為機器碼 (目標文件.obj) . . . . . 地址和空間分配 符號決議 重定位 . . . . . 可執(zhí)行應用程序 鏈接圖示流程圖示 本地本地實現(xiàn)調用第三方庫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論