日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

發(fā)布時(shí)間:2024/4/11 c/c++ 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言

本篇將介紹一些gtest的基本使用,包括下載,安裝,編譯,建立我們第一個(gè)測(cè)試Demo工程,以及編寫(xiě)一個(gè)最簡(jiǎn)單的測(cè)試案例。?

二、下載

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

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?

三、編譯

下載解壓后, 里面有個(gè)msvc目錄:

?

使用VS的同學(xué)可以直接打開(kāi)msvc里面的工程文件, 如果你在使用的是VS2005或是VS2008,打開(kāi)后會(huì)提示你升級(jí),升完級(jí)后,我們直接編譯里面的“gtest”工程,可以直接編過(guò)的。

這里要提醒一下的是,如果你升級(jí)為VS2008的工程,那么你的測(cè)試Demo最好也是VS2008工程,不然你會(huì)發(fā)現(xiàn)很郁悶,你的Demo怎么也編不過(guò),我也曾折騰了好久,當(dāng)時(shí)我升級(jí)為了VS2008工程,結(jié)果我使用VS2005工程建Demo,死活編不過(guò)。(這里有人誤解了,并不是說(shuō)只能在VS2008中編譯,在VS2005中同樣可以。如果要編譯VS2005版本,最好保證gtest和你的測(cè)試工程都使用VS2005工程。)

編譯之后,在msvc里面的Debug或是Release目錄里看到編譯出來(lái)的gtestd.lib或是gtest.lib文件。

四、第一個(gè)Demo

下面我們開(kāi)始建立我們的第一個(gè)Demo了,假如之前使用的VS2008編譯的gtest,那么,我們?cè)赩S2008中,新建一個(gè)Win32 Console Application。接著就是設(shè)置工程屬性,總結(jié)如下:

1.設(shè)置gtest頭文件路徑

2.設(shè)置gtest.lib路徑

3.Runtime Library設(shè)置

?

如果是Release版本,Runtime Library設(shè)為/MT。當(dāng)然,其實(shí)你也可以選擇動(dòng)態(tài)鏈接(/MD),前提是你之前編譯的gtest也使用了同樣是/MD選項(xiàng)。

工程設(shè)置后了后,我們來(lái)編寫(xiě)一個(gè)最簡(jiǎn)單測(cè)試案例試試,我們先來(lái)寫(xiě)一個(gè)被測(cè)試函數(shù):

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);
}

沒(méi)錯(cuò),上面的函數(shù)是用來(lái)求最大公約數(shù)的。下面我們就來(lái)編寫(xiě)一個(gè)簡(jiǎn)單的測(cè)試案例。

#include?<gtest/gtest.h>

TEST(FooTest,?HandleNoneZeroInput)
{
????EXPECT_EQ(
2,?Foo(4,?10));
????EXPECT_EQ(
6,?Foo(30,?18));
}

上面可以看到,編寫(xiě)一個(gè)測(cè)試案例是多么的簡(jiǎn)單。 我們使用了TEST這個(gè)宏,它有兩個(gè)參數(shù),官方的對(duì)這兩個(gè)參數(shù)的解釋為:[TestCaseName,TestName],而我對(duì)這兩個(gè)參數(shù)的定義是:[TestSuiteName,TestCaseName],在下一篇我們?cè)賮?lái)看為什么這樣定義。

對(duì)檢查點(diǎn)的檢查,我們上面使用到了EXPECT_EQ這個(gè)宏,這個(gè)宏用來(lái)比較兩個(gè)數(shù)字是否相等。Google還包裝了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的區(qū)別是:

??? 1. EXPECT_*? 失敗時(shí),案例繼續(xù)往下執(zhí)行。

??? 2. ASSERT_* 失敗時(shí),直接在當(dāng)前函數(shù)中返回,當(dāng)前函數(shù)中ASSERT_*后面的語(yǔ)句將不會(huì)執(zhí)行。?

在下一篇,我們?cè)賮?lái)具體討論這些斷言宏。為了讓我們的案例運(yùn)行起來(lái),我們還需要在main函數(shù)中添加如下代碼:

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

“testing::InitGoogleTest(&argc, argv);” :gtest的測(cè)試案例允許接收一系列的命令行參數(shù),因此,我們將命令行參數(shù)傳遞給gtest,進(jìn)行一些初始化操作。gtest的命令行參數(shù)非常豐富,在后面我們也會(huì)詳細(xì)了解到。

“RUN_ALL_TESTS()” :運(yùn)行所有測(cè)試案例

OK,一切就緒了,我們直接運(yùn)行案例試試(一片綠色,非常爽):

?

五、總結(jié)

本篇內(nèi)容確實(shí)是非常的初級(jí),目的是讓從來(lái)沒(méi)有接觸過(guò)gtest的同學(xué)了解gtest最基本的使用。gtest還有很多更高級(jí)的使用方法,我們將會(huì)在后面討論??偨Y(jié)本篇的內(nèi)容的話(huà):

??? 1. 使用VS編譯gtest.lib文件

??? 2. 設(shè)置測(cè)試工程的屬性(頭文件,lib文件,/MT參數(shù)(和編譯gtest時(shí)使用一樣的參數(shù)就行了))

??? 3. 使用TEST宏開(kāi)始一個(gè)測(cè)試案例,使用EXPECT_*,ASSER_*系列設(shè)置檢查點(diǎn)。

??? 4. 在Main函數(shù)中初始化環(huán)境,再使用RUN_ALL_TEST()宏運(yùn)行測(cè)試案例。

優(yōu)點(diǎn):

??? 1. 我們的測(cè)試案例本身就是一個(gè)exe工程,編譯之后可以直接運(yùn)行,非常的方便。

??? 2. 編寫(xiě)測(cè)試案例變的非常簡(jiǎn)單(使用一些簡(jiǎn)單的宏如TEST),讓我們將更多精力花在案例的設(shè)計(jì)和編寫(xiě)上。

??? 3. 提供了強(qiáng)大豐富的斷言的宏,用于對(duì)各種不同檢查點(diǎn)的檢查。

??? 4. 提高了豐富的命令行參數(shù)對(duì)案例運(yùn)行進(jìn)行一系列的設(shè)置。

總結(jié)

以上是生活随笔為你收集整理的玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。