一、設(shè)置一個(gè)新的測(cè)試項(xiàng)目
在用google test寫測(cè)試項(xiàng)目之前,需要先編譯gtest到library庫并將測(cè)試與其鏈接。我們?yōu)橐恍┝餍械臉?gòu)建系統(tǒng)提供了構(gòu)建文件: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/ for GNU make, codegear/ for Borland C++ Builder.
如果你的構(gòu)建系統(tǒng)不在這個(gè)名單上,在googletest根目錄有autotools的腳本(不推薦使用)和CMakeLists.txtCMake(推薦)。你可以看看make / Makefile來了解如何編譯Google Test(基本上你想在頭文件中使用GTEST_ROOT和GTEST_ROOT / include來編譯src / gtest-all.cc路徑,其中GTEST_ROOT是Google測(cè)試根目錄)。
一旦你能夠編譯google test庫,您應(yīng)該為您的測(cè)試程序創(chuàng)建一個(gè)項(xiàng)目或構(gòu)建目標(biāo)。Make sure you have GTEST_ROOT/include in the header search path so that the compiler can find "gtest/gtest.h" when compiling your test.把google test庫加到你的測(cè)試項(xiàng)目中(比如:在VS中在gtest.vcproj上添加依賴)。
二、基本概念
當(dāng)使用谷歌測(cè)試,您首先要寫斷言,斷言是檢查條件是否為真的語句。一個(gè)斷言的結(jié)果可以是成功,非致命性失敗,或致命的失敗。如果一個(gè)致命失敗出現(xiàn),它會(huì)終止當(dāng)前的函數(shù);否則程序繼續(xù)正常運(yùn)行。
測(cè)試使用斷言驗(yàn)證代碼的行為。如果一個(gè)測(cè)試崩潰或者有一個(gè)失敗的斷言,那么失??;否則成功。
一個(gè)測(cè)試用例包含一個(gè)或多個(gè)測(cè)試。 您應(yīng)該將測(cè)試分組為反映測(cè)試代碼結(jié)構(gòu)的測(cè)試用例。當(dāng)測(cè)試用例中的多個(gè)測(cè)試需要共享公共的對(duì)象和子程序時(shí),你可以把它們放進(jìn)一個(gè)test fixture class(測(cè)試夾具類)。
一個(gè)測(cè)試程序可以包含多個(gè)測(cè)試用例。
現(xiàn)在我們將解釋如何編寫測(cè)試程序,從單個(gè)斷言級(jí)別開始,并構(gòu)建測(cè)試和測(cè)試用例。
三、斷言
Google Test斷言是類似于函數(shù)調(diào)用的宏。您可以通過對(duì)其行為進(jìn)行斷言來測(cè)試類或函數(shù)。當(dāng)斷言失敗時(shí),Google Test會(huì)打印斷言的源文件和行號(hào)位置以及失敗消息。您還可以提供自定義失敗消息,該消息將附加到Google測(cè)試的信息中。
斷言是成對(duì)的,測(cè)試同一件事,但對(duì)當(dāng)前函數(shù)有不同的影響。 ASSERT_ *版本在失敗時(shí)會(huì)生成致命錯(cuò)誤,并中止當(dāng)前函數(shù)。 EXPECT_ *版本生成非致命性故障,不會(huì)中止當(dāng)前函數(shù)。通常優(yōu)先使用EXPECT_ *,因?yàn)樗鼈冊(cè)试S在測(cè)試中報(bào)告多個(gè)故障。但是,如果失敗時(shí)函數(shù)繼續(xù)運(yùn)行沒有意義,則應(yīng)使用ASSERT_ *。
因?yàn)槭〉腁SSERT_ *立即從當(dāng)前函數(shù)返回,可能跳過其后的清理代碼,它可能導(dǎo)致資源泄漏。根據(jù)泄漏的性質(zhì),它可能值得修復(fù)也可能不值得修復(fù)--所以把這個(gè)記在心里,如果你有一個(gè)堆檢測(cè)錯(cuò)誤需要注意是什么導(dǎo)致的。
要提供自定義失敗消息,只需使用<<運(yùn)算符或一系列此類運(yùn)算符將其流式傳輸?shù)胶曛屑纯?。一個(gè)例子: