突然登上GitHub熱榜!谷歌的這款測(cè)試工具,別告訴我你不知道
在一些項(xiàng)目中,有些測(cè)試問(wèn)題,是無(wú)法通過(guò)集成測(cè)試解決的,比較合適的方法是通過(guò)單元測(cè)試。
谷歌有一個(gè)名為Google test的C++測(cè)試框架,它能夠幫助我們比較方便的進(jìn)行測(cè)試代碼的編寫,以及輸出盡可能詳細(xì)的失敗信息,從而大大提高代碼測(cè)試的效率,無(wú)論是Linux,Windows還是Mac,Google test都支持。
實(shí)際上,Google test已經(jīng)發(fā)布很久了,只是最近幾天又被廣大程序員粉絲們送上了GitHub熱榜,因?yàn)樵摯鎯?chǔ)庫(kù)是GoogleTest和GoogleMock項(xiàng)目的合并。
目前,在GitHub上標(biāo)星16.4K,累計(jì)分支6.4K,可以說(shuō)是非常受歡迎了。(Github地址:https://github.com/google/googletest)
由于Googletest是基于流行的xUnit框架的,如果你以前用過(guò)JUnit或PYUnit,那你使用起Googletest一定是得心應(yīng)手。如果沒(méi)有,花點(diǎn)時(shí)間學(xué)習(xí)一些基礎(chǔ)知識(shí)也是可以很快上手的。
Google Test采用一系列的斷言(assertion)來(lái)進(jìn)行代碼測(cè)試,這些宏有點(diǎn)類似于函數(shù)調(diào)用。用戶可以直接通過(guò)“<<”在這些斷言宏后面跟上自己希望在斷言命中時(shí)的輸出信息。舉個(gè)例子:
- ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";
- for (int i = 0; i < x.size(); ++i) {
- EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
- }
一些常見(jiàn)的斷言語(yǔ)句如下:
測(cè)試宏可以分為兩大類:ASSERT_*和EXPECT_*:
其中ASSERT_*將會(huì)在失敗時(shí)產(chǎn)生致命錯(cuò)誤并中止當(dāng)前調(diào)用它的函數(shù)執(zhí)行。EXPECT_*版本的會(huì)生成非致命錯(cuò)誤,不會(huì)中止當(dāng)前函數(shù),而是繼續(xù)執(zhí)行當(dāng)前函數(shù)。
二值比較:
值參數(shù)必須可由斷言的比較運(yùn)算符進(jìn)行比較,否則會(huì)出現(xiàn)編譯器錯(cuò)誤。這些斷言可以使用用戶定義的類型,但前提是你定義了相應(yīng)的比較運(yùn)算符(例如==或<),不過(guò),并不建議你這樣做。
字符串比較:
如果你也對(duì)Googletest感興趣,可以到GitHub項(xiàng)目詳情頁(yè)了解更多。