gtest的安裝和測試[good]

1、前言

本篇將介紹一些gtest的基本使用,包括下載,安裝,編譯,創建咱們第一個測試Demo工程,以及編寫一個最簡單的測試案例。 html

2、下載

若是不記得網址, 直接在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 單元測試

3、編譯

下載解壓後, 裏面有個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

4、第一個Demo

下面咱們開始創建咱們的第一個Demo了,假如以前使用的VS2008編譯的gtest,那麼,咱們在VS2008中,新建一個Win32 Console Application。接着就是設置工程屬性,總結以下:命令行

1.設置gtest頭文件路徑

2.設置gtest.lib路徑

3.Runtime Library設置

 

若是是Release版本,Runtime Library設爲/MT。固然,其實你也能夠選擇動態連接(/MD),前提是你以前編譯的gtest也使用了一樣是/MD選項。

工程設置後了後,咱們來編寫一個最簡單測試案例試試,咱們先來寫一個被測試函數:

複製代碼
int  Foo( int  a,  int  b)
{
    
if  (a  ==   0   ||  b  ==   0 )
    {
        
throw   " don't do that " ;
    }
    
int  c  =  a  %  b;
    
if  (c  ==   0 )
        
return  b;
    
return  Foo(b, c);
}
複製代碼

 

沒錯,上面的函數是用來求最大公約數的。下面咱們就來編寫一個簡單的測試案例。

複製代碼
#include  < gtest / gtest.h >

TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(
2 , Foo( 4 10 ));
    EXPECT_EQ(
6 , Foo( 30 18 ));
}
複製代碼

 

上面能夠看到,編寫一個測試案例是多麼的簡單。 咱們使用了TEST這個宏,它有兩個參數,官方的對這兩個參數的解釋爲:[TestCaseName,TestName],而我對這兩個參數的定義是:[TestSuiteName,TestCaseName],在下一篇咱們再來看爲何這樣定義。

對檢查點的檢查,咱們上面使用到了EXPECT_EQ這個宏,這個宏用來比較兩個數字是否相等。Google還包裝了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的區別是:

    1. EXPECT_*  失敗時,案例繼續往下執行。

    2. ASSERT_* 失敗時,直接在當前函數中返回,當前函數中ASSERT_*後面的語句將不會執行。 

在下一篇,咱們再來具體討論這些斷言宏。爲了讓咱們的案例運行起來,咱們還須要在main函數中添加以下代碼:

int  _tmain( int  argc, _TCHAR *  argv[])
{
    testing::InitGoogleTest(
& argc, argv);
    
return  RUN_ALL_TESTS();
}

 

「testing::InitGoogleTest(&argc, argv);」 :gtest的測試案例容許接收一系列的命令行參數,所以,咱們將命令行參數傳遞給gtest,進行一些初始化操做。gtest的命令行參數很是豐富,在後面咱們也會詳細瞭解到。

「RUN_ALL_TESTS()」 :運行全部測試案例

OK,一切就緒了,咱們直接運行案例試試(一片綠色,很是爽):

 

5、總結

本篇內容確實是很是的初級,目的是讓歷來沒有接觸過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)之六 - 運行參數

7.玩轉Google開源C++單元測試框架Google Test系列(gtest)之七 - 深刻解析gtest

8.玩轉Google開源C++單元測試框架Google Test系列(gtest)之八 - 打造本身的單元測試框架

相關文章
相關標籤/搜索