1. 程式人生 > >玩轉Google開源C++單元測試框架Google Test系列(gtest)之一

玩轉Google開源C++單元測試框架Google Test系列(gtest)之一

一、前言

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

二、下載

如果不記得網址, 直接在google裡搜gtest,第一個就是。目前gtest的最新版本為1.3.0,從下列地址可以下載到該最新版本:

三、編譯

下載解壓後, 裡面有個msvc目錄:

 

使用VS的同學可以直接開啟msvc裡面的工程檔案, 如果你在使用的是VS2005或是VS2008,開啟後會提示你升級,升完級後,我們直接編譯裡面的“gtest”工程,可以直接編過的。

這裡要提醒一下的是,如果你升級為VS2008的工程,那麼你的測試Demo最好也是VS2008工程,不然你會發現很鬱悶,你的Demo怎麼也編不過,我也曾折騰了好久,當時我升級為了VS2008工程,結果我使用VS2005工程建Demo,死活編不過。(這裡有人誤解了,並不是說只能在VS2008中編譯,在VS2005中同樣可以。如果要編譯VS2005版本,最好保證gtest和你的測試工程都使用VS2005工程。)

編譯之後,在msvc裡面的Debug或是Release目錄裡看到編譯出來的gtestd.lib或是gtest.lib檔案。

四、第一個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(410));
    EXPECT_EQ(
6, Foo(
3018));
}
複製程式碼

上面可以看到,編寫一個測試案例是多麼的簡單。 我們使用了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,一切就緒了,我們直接執行案例試試(一片綠色,非常爽):

 

五、總結

本篇內容確實是非常的初級,目的是讓從來沒有接觸過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. 提供了強大豐富的斷言的巨集,用於對各種不同檢查點的檢查。

相關推薦

Google開源C++單元測試框架Google Test系列(gtest)(總)

前段時間學習和了解了下Google的開源C++單元測試框架Google Test,簡稱gtest,非常的不錯。 我們原來使用的是自己實現的一套單元測試框架,在使用過程中,發現越來越多使用不便之處,而這樣不便之處,gtest恰恰很好的解決了。 其實gtest本身的實現並不複雜

Gtest:死亡測試 Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試

轉自:玩轉Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試 一、前言 “死亡測試”名字比較恐怖,這裡的“死亡”指的的是程式的崩潰。通常在測試過程中,我們需要考慮各種各樣的輸入,有的輸入可能直接導致程式崩潰,這時我們就需要檢查程式是否按照預期的方式掛掉,這也就是所

Gtest:引數化 Google開源C++單元測試框架Google Test系列(gtest)之四 - 引數化

轉自:玩轉Google開源C++單元測試框架Google Test系列(gtest)之四 - 引數化 一、前言 在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望

Google開源C++單元測試框架Google Test系列(gtest)之一

一、前言本篇將介紹一些gtest的基本使用,包括下載,安裝,編譯,建立我們第一個測試Demo工程,以及編寫一個最簡單的測試案例。 二、下載如果不記得網址, 直接在google裡搜gtest,第一個就是。目前gtest的最新版本為1.3.0,從下列地址可以下載到該最新版本:三、

Google開源C++單元測試框架Google Test系列(gtest)之六

一、前言使用gtest編寫的測試案例通常本身就是一個可執行檔案,因此執行起來非常方便。同時,gtest也為我們提供了一系列的執行引數(環境變數、命令列引數或程式碼裡指定),使得我們可以對案例的執行進行一些有效的控制。二、基本介紹前面提到,對於執行引數,gtest提供了三種設定

Google開源C++單元測試框架Google Test系列(gtest)之五

一、前言 “死亡測試”名字比較恐怖,這裡的“死亡”指的的是程式的崩潰。通常在測試過程中,我們需要考慮各種各樣的輸入,有的輸入可能直接導致程式崩潰,這時我們就需要檢查程式是否按照預期的方式掛掉,這也就是所謂的“死亡測試”。gtest的死亡測試能做到在一個安全的環境下執行崩潰的

Google開源C++單元測試框架Google Test系列(gtest)之四

一、前言在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望能夠少寫程式碼,多複用程式碼。Google的程式設計師也一樣,他們考慮到了

Google開源C++ 單元測試框架Google Test系列(gtest)之初始gtest

    下載           最新原始碼地址:https://github.com/google/googletest           V1.3和V1.

Google開源C++單元測試框架Google Test系列(gtest)之斷言

     gtest中,斷言的巨集可以理解為分為兩類,一類是ASSERT系列,一類是EXPECT系列。一個直觀的解釋就是: ASSERT_* 系列的斷言,當檢查點失敗時,退出當前函式(注意:並非退出當前案例)。   EXPECT_* 系列的斷言,當檢查點失敗時,繼續往下

Google開源C++單元測試框架Google Test系列(gtest)之引數化

      在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望能夠少寫程式碼,多複用程式碼。      Google的程式設計師也

Google開源C++單元測試框架Google Test系列(gtest)之- 事件機制

gtest提供了多種事件機制,非常方便我們在案例之前或之後做一些操作。總結一下gtest的事件一共有3種: 全域性的,所有案例執行前後。 TestSuite級別的,在某一批案例中第一個案例前,最後一個案例執行後  TestCase級別的,每個TestCase前後。 全域

Google開源單元測試框架Google Test:VS2012 配置

由題目可知,Google Test(簡稱gtest)是Google釋出的一個開源C/C++測試框架,被應用於多個開源專案及Google內部專案中,包括Chrome瀏覽器、LLVM編譯器架構、Protocol Buffers資料交換格式及工具、OpenCV計算機視

Google C++單元測試框架---Gtest框架簡介(譯文)

一、設定一個新的測試專案   在用google test寫測試專案之前,需要先編譯gtest到library庫並將測試與其連結。我們為一些流行的構建系統提供了構建檔案: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/

Google C++單元測試框架---Gtest框架簡介(譯文)[轉載]

一、設定一個新的測試專案  在用google test寫測試專案之前,需要先編譯gtest到library庫並將測試與其連結。我們為一些流行的構建系統提供了構建檔案: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/ f

C單元測試框架——CMockery簡介與示例

簡介 是google釋出的用於C單元測試的一個輕量級的框架。 主要特點: 免費且開源,google提供技術支援;輕量級的框架,使測試更加快速簡單;避免使用複雜的編譯器特性,對老版本的編譯器來講,相容性好;並不強制要求待測程式碼必須依賴C99標準,這一特性對許多嵌入式

VS2013 本地C++單元測試框架

在VS2013中,可以使用VS自帶的C++單元測試框架。  在使用該框架前,需要先安裝Unit Test Generator(可以通過選單“工具->擴充套件和更新”搜尋安裝)。  下邊,就闡述一下利用該框架的步驟:1. 新建空的Win32控制檯專案NativeUnitT

】nose-parameterized是Python單元測試框架實現參數化的擴展

col ever sel mage 多線程 stc nbsp zed testng 原文地址: http://www.cnblogs.com/fnng/p/6580636.html   相對而言,Python下面單元測試框架要弱上少,尤其是Python自帶的unittest

Check—強大的C語言單元測試框架

repr free fail turn ram creat log cap less 1. 前言 在看基數樹源碼時,發現源碼裏面有個deps的依賴文件夾,deps裏是一個叫Check的源碼安裝包,Google之後發現Check原來是C語言單元測試框架。關於單元測試,Wik

C語言單元測試框架-Check

     雖然在UNIX上用C語言做開發已經有一段時間了,但是我不得不承認,自己單元測試做的並不好。恰好最近有新的開發任務,就學習了一些關於測試驅動開發的知識,準備改進自己的單元測試。XP程式設計已經興起好一段時間了,也形成了很多優秀的單元測試框架,例如:JUnit,想必使用

CPPUTest 單元測試框架(針對 C 單元測試的使用說明)

CPPUTest 雖然名稱上看起來是 C++ 的單元測試框架, 其實它也是支援測試 C 程式碼的. 本文主要介紹用CPPUTest來測試 C 程式碼. (C++沒用過, 平時主要用的是C) C++相關的內容都省略了. 本文基於 debian v7.6 x86_64. 1. CPPUTest 安裝 現在各