本篇將介紹一些gtest的基本使用,包括下載,安裝,編譯,創建咱們第一個測試Demo工程,以及編寫一個最簡單的測試案例。 html
若是不記得網址, 直接在google裏搜gtest,第一個就是。目前gtest的最新版本爲1.3.0,從下列地址能夠下載到該最新版本:spring
http://googletest.googlecode.com/files/gtest-1.3.0.zip 框架
http://googletest.googlecode.com/files/gtest-1.3.0.tar.gz 函數
http://googletest.googlecode.com/files/gtest-1.3.0.tar.bz2 單元測試
下載解壓後, 裏面有個msvc目錄:測試
使用VS的同窗能夠直接打開msvc裏面的工程文件, 若是你在使用的是VS2005或是VS2008,打開後會提示你升級,升完級後,咱們直接編譯裏面的「gtest」工程,能夠直接編過的。ui
這裏要提醒一下的是,若是你升級爲VS2008的工程,那麼你的測試Demo最好也是VS2008工程,否則你會發現很鬱悶,你的Demo怎麼也編不過,我也曾折騰了很久,當時我升級爲了VS2008工程,結果我使用VS2005工程建Demo,死活編不過。(這裏有人誤解了,並非說只能在VS2008中編譯,在VS2005中一樣能夠。若是要編譯VS2005版本,最好保證gtest和你的測試工程都使用VS2005工程。)google
編譯以後,在msvc裏面的Debug或是Release目錄裏看到編譯出來的gtestd.lib或是gtest.lib文件。spa
下面咱們開始創建咱們的第一個Demo了,假如以前使用的VS2008編譯的gtest,那麼,咱們在VS2008中,新建一個Win32 Console Application。接着就是設置工程屬性,總結以下:命令行
1.設置gtest頭文件路徑
2.設置gtest.lib路徑
3.Runtime Library設置
若是是Release版本,Runtime Library設爲/MT。固然,其實你也能夠選擇動態連接(/MD),前提是你以前編譯的gtest也使用了一樣是/MD選項。
工程設置後了後,咱們來編寫一個最簡單測試案例試試,咱們先來寫一個被測試函數:
沒錯,上面的函數是用來求最大公約數的。下面咱們就來編寫一個簡單的測試案例。
上面能夠看到,編寫一個測試案例是多麼的簡單。 咱們使用了TEST這個宏,它有兩個參數,官方的對這兩個參數的解釋爲:[TestCaseName,TestName],而我對這兩個參數的定義是:[TestSuiteName,TestCaseName],在下一篇咱們再來看爲何這樣定義。
對檢查點的檢查,咱們上面使用到了EXPECT_EQ這個宏,這個宏用來比較兩個數字是否相等。Google還包裝了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的區別是:
1. EXPECT_* 失敗時,案例繼續往下執行。
2. ASSERT_* 失敗時,直接在當前函數中返回,當前函數中ASSERT_*後面的語句將不會執行。
在下一篇,咱們再來具體討論這些斷言宏。爲了讓咱們的案例運行起來,咱們還須要在main函數中添加以下代碼:
「testing::InitGoogleTest(&argc, argv);」 :gtest的測試案例容許接收一系列的命令行參數,所以,咱們將命令行參數傳遞給gtest,進行一些初始化操做。gtest的命令行參數很是豐富,在後面咱們也會詳細瞭解到。
「RUN_ALL_TESTS()」 :運行全部測試案例
OK,一切就緒了,咱們直接運行案例試試(一片綠色,很是爽):
本篇內容確實是很是的初級,目的是讓歷來沒有接觸過gtest的同窗瞭解gtest最基本的使用。gtest還有不少更高級的使用方法,咱們將會在後面討論。總結本篇的內容的話:
1. 使用VS編譯gtest.lib文件
2. 設置測試工程的屬性(頭文件,lib文件,/MT參數(和編譯gtest時使用同樣的參數就好了))
3. 使用TEST宏開始一個測試案例,使用EXPECT_*,ASSER_*系列設置檢查點。
4. 在Main函數中初始化環境,再使用RUN_ALL_TEST()宏運行測試案例。
優勢:
1. 咱們的測試案例自己就是一個exe工程,編譯以後能夠直接運行,很是的方便。
2. 編寫測試案例變的很是簡單(使用一些簡單的宏如TEST),讓咱們將更多精力花在案例的設計和編寫上。
3. 提供了強大豐富的斷言的宏,用於對各類不一樣檢查點的檢查。
4. 提升了豐富的命令行參數對案例運行進行一系列的設置。
系列連接:
1.玩轉Google開源C++單元測試框架Google Test系列(gtest)之一 - 初識gtest
2.玩轉Google開源C++單元測試框架Google Test系列(gtest)之二 - 斷言
3.玩轉Google開源C++單元測試框架Google Test系列(gtest)之三 - 事件機制
4.玩轉Google開源C++單元測試框架Google Test系列(gtest)之四 - 參數化
5.玩轉Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試
6.玩轉Google開源C++單元測試框架Google Test系列(gtest)之六 - 運行參數