最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?測(cè)試框架GoogleTest入門介紹

 更新時(shí)間:2023年04月03日 16:36:16   作者:ENG八戒  
這篇文章主要為大家介紹了C++測(cè)試框架GoogleTest入門基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

開發(fā)者雖然主要負(fù)責(zé)工程里的開發(fā)任務(wù),但是每個(gè)開發(fā)完畢的功能都是需要開發(fā)者自測(cè)通過的,所以經(jīng)常會(huì)聽到開發(fā)者提起單元測(cè)試的話題。那么今天我就帶大伙一起來看看大名鼎鼎的谷歌 C++ 測(cè)試框架 GoogleTest.

簡(jiǎn)單介紹

來看看谷歌官方是怎么介紹這個(gè)框架的:

Googletest 是由測(cè)試技術(shù)團(tuán)隊(duì)根據(jù) Google 的特定要求和約束開發(fā)的測(cè)試框架。無論您是在 Linux,Windows 還是 Mac 上工作,如果您編寫 C++ 代碼,googletest 都可以為您提供幫助。它支持任何類型的測(cè)試,而不僅僅是單元測(cè)試。

雖然谷歌是根據(jù)特定的需求和限制條件來開發(fā)這個(gè)框架的,但是它自己也指明了這個(gè)框架還可以用于其它用途,比如作為模擬器使用,當(dāng)然這就扯遠(yuǎn)了,暫且不提。

谷歌在開發(fā)這套框架的時(shí)候,是有一套基本的設(shè)計(jì)思路的。

他們認(rèn)為測(cè)試應(yīng)該是相互獨(dú)立而且是可重復(fù)的。如果正在做的測(cè)試由于其他測(cè)試的成功或失敗而受到影響,這無疑會(huì)令人感到痛苦。GoogleTest 通過在不同的對(duì)象上運(yùn)行不同的測(cè)試來實(shí)現(xiàn)測(cè)試的相互隔離。當(dāng)其中一個(gè)或多個(gè)測(cè)試失敗時(shí),測(cè)試框架還允許測(cè)試者繼續(xù)單獨(dú)運(yùn)行測(cè)試用例以達(dá)到快速調(diào)試。測(cè)試應(yīng)該組織良好,并反映測(cè)試代碼的結(jié)構(gòu)。有很多測(cè)試其實(shí)可以共享數(shù)據(jù)和子例程的,那么 Googletest 提供了測(cè)試套件的概念將相關(guān)測(cè)試分組,測(cè)試套件中的所有測(cè)試就可以共享數(shù)據(jù)和子例程了。這種模式其實(shí)很常見,并且使得測(cè)試易于維護(hù),特別是當(dāng)你需要切換到新的代碼工程時(shí),測(cè)試流程將極大簡(jiǎn)化。

像谷歌這種規(guī)模的科技企業(yè),內(nèi)部的 C++ 項(xiàng)目非常之多,還是跨平臺(tái)的,那么就對(duì)測(cè)試框架有平臺(tái)無關(guān)的要求了。GoogleTest 正是如此,無論你是用的是那款編譯器,哪個(gè)平臺(tái),通吃。

當(dāng)然,測(cè)試的過程中理應(yīng)提供盡可能全面的信息幫助開發(fā)者理解執(zhí)行軟件過程,GoogleTest 也不例外。就算測(cè)試過程中,某個(gè)測(cè)試執(zhí)行失敗被停止了,測(cè)試框架也會(huì)繼續(xù)其它測(cè)試。如果你不希望某個(gè)測(cè)試由于失敗而停止,可以設(shè)置該測(cè)試為非致命報(bào)錯(cuò)(non-fatal)。像這樣的測(cè)試過程,可以幫助開發(fā)者在單個(gè)運(yùn)行-編輯-編譯周期中找到盡可能多的問題 bug。這樣的測(cè)試框架是不是很高效?

雖說問題 bug 出現(xiàn)就夠令開發(fā)者討厭的了,但是自測(cè)過程的繁瑣事那就更糟心了(頭發(fā)怎么掉得那么快),比如,開發(fā)者除了需要測(cè)試具體內(nèi)容還得自己跟蹤測(cè)試清單。Googletest 就可以幫助你從這里邊脫身出來,做一枚瀟灑的碼農(nóng)。

這里問一句,你用過 JUnit 或 PyUnit 嗎?如果有的話,那么 Googletest 對(duì)你來說真的是易如反掌了。據(jù)說 Googletest 是基于 xUnit 架構(gòu)開發(fā)而來。至于什么是 xUnit 架構(gòu),有機(jī)會(huì)我再聊聊吧。

測(cè)試框架在測(cè)試過程中,基本的測(cè)試操作就是使用斷言(assert)來驗(yàn)證測(cè)試代碼的行為,崩潰或者斷言失敗都表示被測(cè)試代碼的行為不正確,否則正確。

初體驗(yàn)

來看一下簡(jiǎn)單的測(cè)試樣例(環(huán)境配置安裝會(huì)在后面有詳細(xì)介紹)

#include <math.h>
#include <gtest/gtest.h>
int square(const int a)
{
    int b = a * a;
    if (b != b) {
        return -1;
    } else {
        return a * a;
    }
}
TEST(SquareTest, PositiveNos) { 
    ASSERT_EQ(0, square(0));
    ASSERT_EQ(36, square(6));
    ASSERT_EQ(324, square(18));
}
int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

這個(gè)測(cè)試樣例是為了測(cè)試函數(shù) int square(const int a) 的行為是否正確。

編譯生成可執(zhí)行文件之后,運(yùn)行起來

可以看到,上面總共有一個(gè)測(cè)試套件和一個(gè)測(cè)試。首先啟動(dòng)一次全局測(cè)試環(huán)境,使用框架提供的宏 TEST() 創(chuàng)建了一個(gè)測(cè)試套件,命名為 SquareTest,和一個(gè)測(cè)試,命名為 PositiveNos。然后,運(yùn)行測(cè)試套件內(nèi)包含的所有測(cè)試,測(cè)試通過 OK。全部測(cè)試結(jié)束后,卸載全局測(cè)試環(huán)境。匯總?cè)繙y(cè)試結(jié)果 PASSED。測(cè)試流程結(jié)束。

以上就是C++ 測(cè)試框架GoogleTest入門介紹的詳細(xì)內(nèi)容,更多關(guān)于C++ 測(cè)試框架GoogleTest的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中的explicit關(guān)鍵字實(shí)例淺析

    C++中的explicit關(guān)鍵字實(shí)例淺析

    在C++程序中很少有人去使用explicit關(guān)鍵字,不可否認(rèn),在平時(shí)的實(shí)踐中確實(shí)很少能用的上,再說C++的功能強(qiáng)大,往往一個(gè)問題可以利用好幾種C++特性去解決。接下來給大家介紹 C++中的explicit關(guān)鍵字,需要的朋友可以參考下
    2017-03-03
  • C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例

    C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)字符串分割的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • uboot添加自定義命令的實(shí)現(xiàn)步驟

    uboot添加自定義命令的實(shí)現(xiàn)步驟

    uboot 屬于bootloader的一種,是用來引導(dǎo)啟動(dòng)內(nèi)核的,它的最終目的就是從flash中讀出內(nèi)核,放到內(nèi)存中,啟動(dòng)內(nèi)核,這篇文章主要介紹了uboot添加自定義命令的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2022-11-11
  • C++函數(shù)重載的定義與原因詳解

    C++函數(shù)重載的定義與原因詳解

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖示例

    C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖示例

    這篇文章主要為大家介紹了C++?opencv利用grabCut算法實(shí)現(xiàn)摳圖的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化

    C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化

    AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對(duì)抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進(jìn),并提出了一個(gè)更加輕量級(jí)的生成器架構(gòu)。本文將介紹如何運(yùn)用AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化,需要的可以參考一下
    2021-11-11
  • 使用C++遞歸求解跳臺(tái)階問題

    使用C++遞歸求解跳臺(tái)階問題

    這篇文章主要介紹了使用C++求解跳臺(tái)階問題的方法,通過遞歸算法來解決,不算難,文中給出了計(jì)算思路,需要的朋友可以參考下
    2016-02-02
  • C++ Boost Algorithm算法超詳細(xì)精講

    C++ Boost Algorithm算法超詳細(xì)精講

    Boost.Algorithm 提供了補(bǔ)充標(biāo)準(zhǔn)庫(kù)算法的算法。與 Boost.Range 不同,Boost.Algorithm 沒有引入新概念。 Boost.Algorithm 定義的算法類似于標(biāo)準(zhǔn)庫(kù)中的算法
    2022-10-10
  • C語言代碼中調(diào)用C++代碼的方法示例

    C語言代碼中調(diào)用C++代碼的方法示例

    這篇文章主要介紹了C語言代碼中調(diào)用C++代碼的方法示例,文中也介紹了C++代碼調(diào)用C代碼的方法,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • c語言實(shí)現(xiàn)單鏈表算法示例分享

    c語言實(shí)現(xiàn)單鏈表算法示例分享

    這篇文章主要介紹了c語言實(shí)現(xiàn)單鏈表算法示例,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

三门峡市| 怀柔区| 江油市| 西乡县| 曲松县| 松滋市| 肥城市| 昌乐县| 娱乐| 繁峙县| 长武县| 十堰市| 吴桥县| 湖北省| 潞城市| 眉山市| 宣汉县| 香港| 甘德县| 凭祥市| 中方县| 大同县| 云安县| 平安县| 正定县| 垣曲县| 青铜峡市| 祥云县| 共和县| 宁陵县| 澄迈县| 敦化市| 泌阳县| 当雄县| 都兰县| 汤原县| 南开区| 永泰县| 青阳县| 潼关县| 甘肃省|