突然登上GitHub熱榜!谷歌的這款測試工具,別告訴我你不知道
在一些項目中,有些測試問題,是無法通過集成測試解決的,比較合適的方法是通過單元測試。
谷歌有一個名為Google test的C++測試框架,它能夠幫助我們比較方便的進行測試代碼的編寫,以及輸出盡可能詳細的失敗信息,從而大大提高代碼測試的效率,無論是Linux,Windows還是Mac,Google test都支持。
實際上,Google test已經發布很久了,只是最近幾天又被廣大程序員粉絲們送上了GitHub熱榜,因為該存儲庫是GoogleTest和GoogleMock項目的合并。
目前,在GitHub上標星16.4K,累計分支6.4K,可以說是非常受歡迎了。(Github地址:https://github.com/google/googletest)
由于Googletest是基于流行的xUnit框架的,如果你以前用過JUnit或PYUnit,那你使用起Googletest一定是得心應手。如果沒有,花點時間學習一些基礎知識也是可以很快上手的。
Google Test采用一系列的斷言(assertion)來進行代碼測試,這些宏有點類似于函數調用。用戶可以直接通過“<<”在這些斷言宏后面跟上自己希望在斷言命中時的輸出信息。舉個例子:
- 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;
- }
一些常見的斷言語句如下:
測試宏可以分為兩大類:ASSERT_*和EXPECT_*:
其中ASSERT_*將會在失敗時產生致命錯誤并中止當前調用它的函數執行。EXPECT_*版本的會生成非致命錯誤,不會中止當前函數,而是繼續執行當前函數。
二值比較:
值參數必須可由斷言的比較運算符進行比較,否則會出現編譯器錯誤。這些斷言可以使用用戶定義的類型,但前提是你定義了相應的比較運算符(例如==或<),不過,并不建議你這樣做。
字符串比較:
如果你也對Googletest感興趣,可以到GitHub項目詳情頁了解更多。