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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

gtest -UT测试框架

發(fā)布時(shí)間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gtest -UT测试框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??gtest是Google公司發(fā)布的一款非常優(yōu)秀的開源C/C++單元測(cè)試框架。gtest測(cè)試框架是google開源的用于在不同平臺(tái)上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)為編寫C/C++測(cè)試用例的項(xiàng)目。它是基于xUnit架構(gòu)的測(cè)試框架,支持自動(dòng)發(fā)現(xiàn)測(cè)試,豐富的斷言集, 用戶定義的斷言,death測(cè)試,致命與非致命的失敗,類型參數(shù)化測(cè)試,各類運(yùn)行測(cè)試的選項(xiàng)和XML的測(cè)試報(bào)告。

??本文的測(cè)試環(huán)境Ubuntu,用gcc編譯源碼為靜態(tài)庫(kù)(被測(cè)試的源碼接口),而測(cè)試程序用g++編譯。

gtest 環(huán)境安裝

??用命令直接安裝gtest,可直接參考如下的命令操作即可:

~$ sudo apt-get install libgtest-dev /**若是老版本只有這一個(gè)目錄:/usr/src/gtest* ~$ cp /usr/src/gtest ./ -r* ~$ cd gtest*/ /* 這里下載的是最新版本:/usr/src/gtest->googletest 和 /usr/src/googletest* 可以用命令查看安裝的目錄:~$ ls /usr/src*/ ~$ cp /usr/src/googletest ./ -r ~$ cd googletest ~/googletest$ mkdir build ~/googletest$ cd build ~/googletest/build$ cmake .. ~/googletest/build$ make /* make命令執(zhí)行成功后,在build目錄下:* build/googlemock/gtest 生成2個(gè)靜態(tài)庫(kù)文件libgtest_main.a和libgtest.a * 再將庫(kù)文件放到系統(tǒng)目錄下,再使用libgtest_main.a和libgtest.a就像使用系統(tǒng)庫(kù)文件一樣* 這里的靜態(tài)文件也可以不用系統(tǒng)目錄下,存放的路徑中Makefile能找到即可*/ ~/googletest/build$ sudo cp googlemock/gtest/libgtest* /usr/local/lib ~/googletest/build$ sudo cp –r ../googletest/include /usr/include/

gtest 斷言

??gtest作為一個(gè)成熟的單元測(cè)試框架,gtest有一些用于判斷值是否與期望一致的斷言。在gtest中斷言分為兩大類:ASSERT_* 和 EXPECT_*。它們的區(qū)別在于:
??a. ASSERT_*類斷言在失敗時(shí),會(huì)立即退出當(dāng)前的測(cè)試用例(即其所在的函數(shù),但不會(huì)結(jié)束整個(gè)測(cè)試)
??b. EXPECT_*類斷言在失敗時(shí),會(huì)繼續(xù)執(zhí)行剩余代碼,不會(huì)退出當(dāng)前測(cè)試用例。
??在每一個(gè)大類中,有分為多個(gè)小類別,它們分別用于不同目的的測(cè)試,如布爾測(cè)試、數(shù)值測(cè)試、字符串測(cè)試等等,下面逐個(gè)介紹它們所定義的宏。

  • 布爾測(cè)試
    布爾測(cè)試用于測(cè)試給定的值為真還是假,它們包括:
    *_TRUE(condition):期望condition為true,若condition為false,則斷言失敗;
    *_FALSE(condition):期望condition為false,若condition為true,則斷言失敗;
    其中“*“為”ASSERT“或者”EXPECT“,后續(xù)所有的宏都將采用這種形式

  • 布數(shù)值比較測(cè)試
    數(shù)值比較測(cè)試即比較兩個(gè)數(shù)值之間的大小關(guān)系,它們包括:
    *_EQ(expected, actual):expected == actual則成功,否則失敗;
    *_NE(expected, actual):expedted != actual則成功,否則失敗;
    *_LT(val1, val2):val1 < val2則成功,否則失敗;
    *_LE(val1, val2):val1 <= val2 則成功,否則失敗;
    *_GT(val1, val2):val1 > val2則成功,否則失敗;
    *_GE(val1,val2): val1 >= val2則成功,否則失敗;

  • 浮點(diǎn)數(shù)類型比較
    gtest針對(duì)浮點(diǎn)數(shù)是否相等專門定義了宏,它們包括:
    *_FLOAT_EQ(expected, actual):expected與actual相差很小時(shí)成功,否則失敗;
    *_DOUBLE_EQ(expected, actual):expected與actual相差很小時(shí)成功,否則失敗;
    *_NEAR(val1, val2, abs):|val1 - val2| <= abs時(shí)成功,否則失敗;

  • 字符串類型比較
    對(duì)于字符串,gtest提供字符串相等及不等斷言,但它們都只支持C類型的字符串,不支持C++中的std::string和std::wstring,它們包括:
    *_STREQ(expected, actual):同時(shí)支持char*和wchar_t*,expected和actual的字符串內(nèi)容相同則成功,否則失敗;
    *_STRNE(str1, str2):同時(shí)支持char*和wchar_t*,str1和str2字符串內(nèi)容不同則成功,否則失敗;
    *_STRCASEEQ(expected, actual):只支持char*, expected和actual的字符串內(nèi)容相同則成功,否則失敗;
    *_STRCASENE(str1, str2):只支持char*,str1和str2字符串內(nèi)容不同則成功,否則失敗;

  • 執(zhí)行成功與失敗標(biāo)記
    在gtest中,測(cè)試通過(guò)與否有三種狀態(tài),它們對(duì)應(yīng)于一個(gè)枚舉:
    enum Type {
    ?kSuccess, ? ? ?// Succeeded.
    ?kNonFatalFailure, // Failed but the test can continue.
    ?kFatalFailure ? ?// Failed and the test should be terminated.
    };
    每一個(gè)枚舉值都對(duì)應(yīng)一個(gè)宏,通過(guò)這個(gè)宏我們可以返回相應(yīng)的執(zhí)行狀態(tài):
    kSuccess:成功,對(duì)應(yīng)的宏為SUCCEED();
    kNonFatalFailure:雖然失敗,但當(dāng)前測(cè)試用例的后續(xù)測(cè)試仍然繼續(xù)運(yùn)行,對(duì)應(yīng)ADD_FAIL();
    kFatalFailure:致命錯(cuò)誤,當(dāng)前測(cè)試用例后續(xù)測(cè)試不會(huì)執(zhí)行,對(duì)應(yīng)FAIL();

  • 異常檢查
    gtest中提供檢查代碼是否拋出異常的方法,它們包括:
    *_THROW(statement, exception_type):statement如果拋出exception_type類型異常則成功,否則失敗;
    *_ANY_THROW(statement):只要statement拋出任何異常則成功,否則失敗;
    *_NO_THROW(statement):只要statement拋出任何異常則失敗,否則成功;

  • 謂詞檢查
    在gtest中,有一系列的宏,它們第一個(gè)參數(shù)為運(yùn)行的函數(shù)或可執(zhí)行體(要求返回值能夠轉(zhuǎn)換為bool類型),后續(xù)為執(zhí)行函數(shù)所需要的參數(shù),然后這些宏會(huì)自動(dòng)運(yùn)行這個(gè)函數(shù),如果函數(shù)返回true則斷言成功,否則失敗,它們包括:
    *_PRED1(pred, param1):pred位可執(zhí)行體,它接收一個(gè)參數(shù),當(dāng)pred(param1)返回true則斷言成功,否則失敗;
    *_PRED2(pred, param1, param2):pred位可執(zhí)行體,它接收兩個(gè)參數(shù),當(dāng)pred(param1, param2)返回true則斷言成功,否則失敗;
    … …
    gtest中最多提供了對(duì)5個(gè)參數(shù)的支持,即從*_PRED1到*_PRED5。如下測(cè)試代碼:

gtest 單元測(cè)試

??在使用gtest的項(xiàng)目中引入libgtest_main.a和libgtest.a這倆個(gè)靜態(tài)庫(kù)文件和gtest/gtest.h頭文件即可。注:gtest使用了系統(tǒng)的線程庫(kù),所以在項(xiàng)目中還需要引入pthread庫(kù)。
ts_test這個(gè)案例是將gtest的lib文件和頭文件直接和待測(cè)試代碼放在一起使用的,具體用法見 。

代碼覆蓋率測(cè)試工具gcov與lcov

注意事項(xiàng)

collect2: error: ld returned 1 exit status

總結(jié)

以上是生活随笔為你收集整理的gtest -UT测试框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧洲精品一区二区三区久久 | 日本一区二区在线 | 亚洲国产av一区二区三区 | 手机亚洲第一页 | 免费观看全黄做爰的视频 | 日本不卡久久 | 日韩mv欧美mv国产网站 | 玖玖在线播放 | 99re视频这里只有精品 | 亚洲乱码一区二区 | 日本寂寞少妇 | 免费成人黄色网 | 亚洲偷怕 | 草莓视频一区二区三区 | 久久噜噜色综合一区二区 | 久久99精品国产 | 日本一区二区黄色 | 亚洲一区二区在线 | 综合色网站 | av在线激情| 森泽佳奈作品在线观看 | 国产精品久久在线观看 | 精品伦精品一区二区三区视频 | 碧蓝之海动漫在线观看免费高清 | 人人爽人人爽人人片 | 性色av蜜臀av浪潮av老女人 | 一级黄色欧美 | 久久99中文字幕 | 欧美成人国产va精品日本一级 | 国产一二精品 | 日韩精品一二三区 | 久久婷婷丁香 | 一区二区三区免费在线视频 | 无码乱人伦一区二区亚洲 | 国产精品s色 | 免费在线观看黄色av | 亚洲成a人片77777精品 | 日本精品三区 | 亚洲无套 | 亚洲精品国产精品乱码视色 | 国产精品久久久网站 | 国产热热 | 激情文学亚洲色图 | 51嘿嘿嘿国产精品伦理 | 亚洲日本欧美精品 | www.毛片.com| 免费观看理伦片在线播放视频软件 | 自拍偷拍1| 欧美三级图片 | 国产av人人夜夜澡人人爽 | 日韩欧美福利视频 | 日韩影院在线 | 亚洲精品www久久久 一级aaa毛片 | 无码少妇一区二区三区 | 特级西西444www高清大胆免费看 | 91精品国产自产精品男人的天堂 | 中文国语毛片高清视频 | 天堂中文字幕免费一区 | 欧美综合视频 | 日本高清二区 | 国产一区二区三区亚洲 | 亚洲成av人片在线观看 | 国产精品999999| 麻豆福利影院 | 成年人黄色免费网站 | 精品一区在线视频 | 国产麻豆精品在线观看 | 亚洲国产综合一区 | 老女人做爰全过程免费的视频 | 99久久久无码国产精品性黑人 | 18色av | 国产精品尤物 | 国产人妖在线播放 | 人人插插| 亚洲欧美日韩中文在线 | 五月天六月色 | a天堂中文 | 少妇一区二区三区四区 | 日韩精品在线观看AV | 日韩欧美中出 | 久久精品视频在线免费观看 | 黄色网址大全免费 | 潘金莲裸体一级淫片视频 | 精品一区二区三区视频在线观看 | 成人在线不卡视频 | 欧美三极片 | 91免费看片 | 黄色在线观看网站 | 日韩3区 | 精品国产va久久久久久久 | 亚洲精品视频在线看 | 国产精品久久网 | 精品乱码一区二区三区 | 亚洲国产一区二区三区 | 亚洲视频在线观看一区 | 一级在线毛片 | 久久久精品视频在线观看 | 91精品国产精品 | 日韩 中文字幕 |