国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GoogleTest從入門到入門,小白都能看懂的gtest詳細(xì)教程

這篇具有很好參考價(jià)值的文章主要介紹了GoogleTest從入門到入門,小白都能看懂的gtest詳細(xì)教程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

單元測試

項(xiàng)目管理和技術(shù)管理中做單元測試,衡量一個(gè)軟件是否正常的標(biāo)準(zhǔn),良好的單元測試以及足夠多的覆蓋率,至少保證關(guān)鍵功能,關(guān)鍵業(yè)務(wù)的覆蓋率接近100%。

gtest是谷歌公司發(fā)布的一個(gè)跨平臺(tái)(Linux、Mac OS、Windows等)的C++單元測試框架,它提供了豐富的斷言、致命和非致命判斷、參數(shù)化、死亡測試等等。

  • 兩種斷言:

    • ASSERT_*:當(dāng)斷言失敗時(shí),產(chǎn)生致命錯(cuò)誤、并終止當(dāng)前函數(shù)。
    • EXPECT_*:當(dāng)斷言失敗時(shí),產(chǎn)生非致命錯(cuò)誤,并且不會(huì)終止當(dāng)前函數(shù)。
    • 通常都會(huì)用EXPECT_*,因?yàn)槟茉谝淮螠y試中測試出更多的失敗情況。
    • 如果要在出現(xiàn)失敗測試時(shí)立即終止程序,則要選擇ASSERT_*
    • ==注意:==因?yàn)锳SSERT_*會(huì)在失敗時(shí)立即終止函數(shù),那么就可能跳過后面程序中進(jìn)行清理工作的代碼,可能會(huì)產(chǎn)生內(nèi)存泄露。

測試stack

main函數(shù)在gtest_main.cc中,可以把這個(gè)main函數(shù)復(fù)制到你的代碼里面,你將擁有它的控制權(quán)。

GTEST_API_ int main(int argc, char **argv) {
    std::cout << "Running main() from gtest_main.cc\n";
    
    testing::InitGoogleTest(&argc, argv);//解析命令行中的GoogleTest參數(shù),它允許用戶通過多樣的命令行參數(shù)來控制測試程序的行為(即定制命令行參數(shù)的行為)
    return RUN_ALL_TESTS();//將會(huì)搜索不同的Test Case和不同的源文件中所有已經(jīng)存在測試案例,然后運(yùn)行它們,所有Test都成功時(shí)返回1,否則返回0。
}
  • 非致命斷言,即使宏判斷失敗,程序仍然會(huì)順序執(zhí)行后面的代碼

    每一個(gè)測試實(shí)例都必須初初始化每一個(gè)對(duì)象

    ==TEST()宏==的第一個(gè)參數(shù)是Test Case的名稱,第二個(gè)參數(shù)是隸屬于第一個(gè)Test Case參數(shù)的Test的名稱。GoogleTest根據(jù)Test Case對(duì)測試結(jié)果進(jìn)行分組,所以一些相關(guān)的Test應(yīng)該放在同一個(gè)Test Case中。

    #include "gtest/gtest.h"
    #include "MyStack.h"
    
    //測試實(shí)例1
    TEST(testStack, simpletest) {
        MyStack st;
        st.push(4);
        EXPECT_EQ(4, st.pop());//使用Google Test宏進(jìn)行測試(非致命斷言)
    }
    
    //測試實(shí)例2
    TEST(testStack, testAll) {
        MyStack st;
        st.push(9);
        st.push(28);
        
        int val = st.pop();
        EXPECT_EQ(28, val);//28等于val則測試通過(非致命斷言)
        EXPECT_NE(0,val);//0不等于val則測試通過(非致命斷言)
        EXPECT_GT(29, val);//29大于val則測試通過(非致命斷言)
        EXPECT_GE(29, val);//29大于等于val則測試通過(非致命斷言)
        EXPECT_TRUE(val == 28) << "val is not equal to 28";//val == 28結(jié)果為false,輸出后面日志(非致命斷言)
    }
    
  • 致命斷言,如果斷言失敗,當(dāng)前函數(shù)剩下來的代碼將會(huì)被跳過

    TEST(testStack, testAll) {
        MyStack st;
        st.push(9);
        st.push(28);
        
        int val = st.pop();
        ASSERT_EQ(28, val);//28等于val則測試通過(致命斷言)
        ASSERT_NE(0,val);//0不等于val則測試通過(致命斷言)
        ASSERT_GT(29, val);//29大于val則測試通過(致命斷言)
        ASSERT_TRUE(val == 28) << "val is not equal to 28";//val == 28結(jié)果為false,輸出后面日志(致命斷言)
    }
    
  • 字符串?dāng)嘌?/strong>

    TEST(testStack, testAll) {
        MyStack st;
        st.push(9);
        st.push(28);
        
        int val = st.pop();
    	
        EXPECT_EQ("9", st.toString().c_str());//字符串?dāng)嘌?}
    
  • 浮點(diǎn)數(shù)斷言

    TEST(testStack, testAll) {
        MyStack st;
        st.push(9);
        st.push(28);
        
        int val = st.pop();
    	
        EXPECT_FLOAT_EQ(7.0, ((float)val)/4);
        EXPECT_DOUBLE_EQ(7.0, ((double)val)/4);
    }
    
  • 測試裝置(Test Fixtures)

    假如我們有非常多的測試實(shí)例,不想重復(fù)初始化

    TEST_F()宏,我們想讓多個(gè)Test使用同一套數(shù)據(jù)配置時(shí),就需要用到測試裝置,創(chuàng)建測試裝置的具體方法如下:

    • 派生一個(gè)繼承 ::testing::Test 的類,并將該類中的一些內(nèi)容聲明為 protected 類型,以便在子類中進(jìn)行訪問;
    • 根據(jù)實(shí)際情況,編寫默認(rèn)的構(gòu)造函數(shù)或SetUp()函數(shù),來為每個(gè) test 準(zhǔn)備所需內(nèi)容;
    • 根據(jù)實(shí)際情況,編寫默認(rèn)的析構(gòu)函數(shù)或TearDown()函數(shù),來釋放SetUp()中分配的資源;
    • 根據(jù)實(shí)際情況,定義 test 共享的子程序。

    不同用例之間,數(shù)據(jù)實(shí)際都是獨(dú)占的,不會(huì)相互影響。

    TEST_F()宏的第一個(gè)參數(shù)(即Test Case的名稱)必須是測試裝置類的類名。

    對(duì)于TEST_F()定義的每個(gè)Test,Google Test將會(huì)在運(yùn)行時(shí)創(chuàng)建一個(gè)新的測試裝置對(duì)象,并立即通過SetUp()對(duì)其進(jìn)行初始化,然后運(yùn)行這個(gè)Test,之后通過TearDown()進(jìn)行數(shù)據(jù)清理,最后刪除測試裝置對(duì)象。==同一個(gè)Test Case中不同的test具有不同的測試裝置對(duì)象,并且Google Test每次創(chuàng)建新的測試裝置前都會(huì)先刪除之前的測試裝置。==多個(gè)Test不會(huì)重用相同的測試裝置,某個(gè)Test對(duì)測試裝置進(jìn)行修改對(duì)其他Test無影響。

    #include "gtest/gtest.h"
    #include "MyStack.h"
    
    //MyStackTest繼承于testing命名空間下的Test類
    class MyStackTest : public testing :: Test {
    protected:
    	//總是在測試用例開始時(shí)被調(diào)用
        virtual void SetUp() {
    		st.push(34);
    		st.push(28);
    		st.push(56);
    	}
        
        //總是在測試用例結(jié)束后被調(diào)用
        virtual void TearDown() {
            
        }
        
        //構(gòu)造函數(shù),也可以做一部分SetUp函數(shù)的工作
        MyStackTest() {
            std::cout << "MyStackTest is constructed." << std::endl;
            st.push(22);
        }
        //析構(gòu)函數(shù),也可以做一部分TearDown函數(shù)的工作
        ~MyStackTest() {
            std::cout << "Destructed MyStackTest." << std::endl;
        }
        
        MyStack st;
    };
    
    //如果使用了測試裝置,就必須使用TEST_F(測試裝置類, 自定義名稱)
    TEST_F(MyStackTest, testPop) {
        //在這里會(huì)自動(dòng)構(gòu)造一個(gè)MyStack的實(shí)例,并調(diào)用SetUp函數(shù)
        int val = st.pop();
        EXPECT_EQ(56, val);
        //在這里會(huì)調(diào)用TearDown函數(shù)
    }
    
    //testPop2和testPop來自同一個(gè)測試裝置,但是來自不同的測試裝置實(shí)例,兩個(gè)實(shí)例是相互獨(dú)立的個(gè)體
    TEST_F(MyStackTest, testPop2) {
        //在這里會(huì)自動(dòng)構(gòu)造一個(gè)MyStack的實(shí)例,并調(diào)用SetUp函數(shù)
        int val = st.pop();
        EXPECT_EQ(56, val);
        //在這里會(huì)調(diào)用TearDown函數(shù)
    }
    
  • 全局事件

    要實(shí)現(xiàn)全局事件,必須寫一個(gè)類,繼承testing::Environment類,==定義一個(gè)該全局環(huán)境的一個(gè)對(duì)象并將該對(duì)象添加到全局環(huán)境測試中去。==實(shí)現(xiàn)里面的SetUpTearDown成員函數(shù)。SetUp在所有案例執(zhí)行前執(zhí)行,TearDown在所有案例執(zhí)行后執(zhí)行。

    #include "gtest/gtest.h"
    
    class GlobalTest : public testing::Environment {
    public:
        void SetUp() {
            std::cout << "SetUp" << std::endl;
        }
        void TearDown() {
            std::cout << "TearDown" << std::endl;
        }
    };
    
    TEST(abs_test, test_1) {
        EXPECT_EQ(std::abs(-1), 1);
    }
    
    TEST(abs_test, test_2) {
        EXPECT_EQ(std::abs(0), 0);
    }
    
    int main(int argc, char **argv) {
        std::cout << "Running main() from gtest_main.cc\n";
        
        testing::InitGoogleTest(&argc, argv);
        testing::Environment* env = new GlobalTest();
        testing::AddGlobalTestEnvironment(env);
        return RUN_ALL_TESTS();//將會(huì)搜索所有已經(jīng)存在測試案例,然后運(yùn)行他們
    }
    
  • 死亡測試文章來源地址http://www.zghlxwxcb.cn/news/detail-464710.html

    ASSERT_DEATH(參數(shù)1, 參數(shù)2);//程序掛了并且錯(cuò)誤信息和參數(shù)2匹配,此時(shí)認(rèn)為測試通過。如果參數(shù)2為空字符串,則只需要看程序掛沒掛即可。
    ASSERT_EXIT(參數(shù)1, 參數(shù)2);//語句停止并且錯(cuò)誤信息和被提前給的信息匹配。
    

到了這里,關(guān)于GoogleTest從入門到入門,小白都能看懂的gtest詳細(xì)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 小白也能看懂的ChatGPT知識(shí)介紹

    小白也能看懂的ChatGPT知識(shí)介紹

    ChatGPT 是一款由 OpenAI 開發(fā)的人工智能技術(shù)驅(qū)動(dòng)的語言模型應(yīng)用。以下是 ChatGPT 的主要特點(diǎn)和功能: 自然語言處理:ChatGPT 可以識(shí)別和理解自然語言,包括英語、法語、德語、西班牙語等多種語言。它可以回答各種問題、提供各種建議,并與人類進(jìn)行自然的對(duì)話。 語言模型:

    2024年02月06日
    瀏覽(26)
  • 小白也能看懂的零信任SDP介紹

    小白也能看懂的零信任SDP介紹

    SDP全稱是Software Defined Perimeter,即軟件定義邊界,是由國際云安全聯(lián)盟CSA于2013年提出的基于零信任(Zero Trust)理念的新一代網(wǎng)絡(luò)安全技術(shù)架構(gòu)。 一個(gè)經(jīng)典訪問關(guān)系普遍都可匯總為這樣的訪問模型:【終端】-【網(wǎng)絡(luò)】-【業(yè)務(wù)系統(tǒng)】。訪問最初是由終端產(chǎn)生請(qǐng)求,通過網(wǎng)絡(luò)發(fā)送給

    2024年02月08日
    瀏覽(22)
  • 【概念】區(qū)塊鏈中賬本是什么?通用區(qū)塊鏈平臺(tái)賬本概念介紹,一個(gè)誰都能看懂的賬本概念

    目錄 前言 舉個(gè)例子 賬本在不同鏈中擔(dān)任什么角色 聯(lián)盟鏈 公有鏈 私有鏈 隨著區(qū)塊鏈的發(fā)展,目前國內(nèi)也掀起了一陣區(qū)塊鏈的熱潮,無論是金融、信任、交易、溯源等領(lǐng)域都是非常受歡迎,慢慢的我們也將成為第一個(gè)吃螃蟹的人,本篇文章主要是與大家一起聊聊什么是區(qū)塊鏈

    2023年04月10日
    瀏覽(26)
  • 智能車上位機(jī)系統(tǒng),pyqt下的socket通信,python實(shí)現(xiàn)服務(wù)器+客戶端,文本+視頻不定長字節(jié)傳輸,超詳細(xì),小白都能看懂

    智能車上位機(jī)系統(tǒng),pyqt下的socket通信,python實(shí)現(xiàn)服務(wù)器+客戶端,文本+視頻不定長字節(jié)傳輸,超詳細(xì),小白都能看懂

    目錄 前言: 準(zhǔn)備工作: 初級(jí)服務(wù)器端編寫: 中級(jí)服務(wù)器端編寫+客戶端收數(shù)據(jù)函數(shù)實(shí)現(xiàn): 數(shù)據(jù)包格式v1.0 客戶端收數(shù)據(jù)函數(shù)V1.0 客戶端分析1.0 ??? 本地測試:成功! ???? 兩臺(tái)主機(jī)測試1.0:失敗,視頻解析失敗,直接花屏了! 問題分析: 問題解決: 數(shù)據(jù)包格式V2.0 客戶端接

    2024年04月17日
    瀏覽(22)
  • [免費(fèi)專欄] Android安全之Android Xposed插件開發(fā),小白都能看得懂的教程

    [免費(fèi)專欄] Android安全之Android Xposed插件開發(fā),小白都能看得懂的教程

    也許每個(gè)人出生的時(shí)候都以為這世界都是為他一個(gè)人而存在的,當(dāng)他發(fā)現(xiàn)自己錯(cuò)的時(shí)候,他便開始長大 少走了彎路,也就錯(cuò)過了風(fēng)景,無論如何,感謝經(jīng)歷 轉(zhuǎn)移發(fā)布平臺(tái)通知:將不再在CSDN博客發(fā)布新文章,敬請(qǐng)移步知識(shí)星球 感謝大家一直以來對(duì)我CSDN博客的關(guān)注和支持,但

    2024年02月09日
    瀏覽(39)
  • 等保2.0丨5分鐘速覽:小白也能看懂的等保2.0介紹

    等保2.0丨5分鐘速覽:小白也能看懂的等保2.0介紹

    等級(jí)保護(hù)2.0自2019年12月1日正式實(shí)施起,到現(xiàn)在已經(jīng)有兩個(gè)多月的時(shí)間,但是仍然有剛剛進(jìn)入等保領(lǐng)域的“萌新”反饋,需要小編再做一個(gè)簡單的介紹,那么今天的干貨內(nèi)容,我們就來一起了解什么是等保2.0,最新實(shí)施的2.0又和之前的1.0有哪些區(qū)別,新增了什么? 等保2.0的概

    2024年02月15日
    瀏覽(21)
  • 小周帶你讀論文-2之“草履蟲都能看懂的Transformer老活兒新整“Attention is all you need(2)

    小周帶你讀論文-2之“草履蟲都能看懂的Transformer老活兒新整“Attention is all you need(2)

    書接前文:小周帶你讀論文-2之\\\"草履蟲都能看懂的Transformer老活兒新整\\\"Attention is all you need(1) (qq.com) ? ? ??上文書說到為什么我們要用casual-decoder架構(gòu),把Transformer的左邊給省略了,于是得到下圖這樣的架構(gòu) ? ? ? 上圖是GPT-1的模型結(jié)構(gòu),那么casual-decoder和原始Transformer除了沒

    2024年01月21日
    瀏覽(23)
  • WPS AI最全申請(qǐng)與使用手冊(cè);AIGC制作游戲音樂;便宜快捷使用完整版SD;人人都能看懂的ChatGPT原理課 | ShowMeAI日?qǐng)?bào)

    WPS AI最全申請(qǐng)與使用手冊(cè);AIGC制作游戲音樂;便宜快捷使用完整版SD;人人都能看懂的ChatGPT原理課 | ShowMeAI日?qǐng)?bào)

    ?? 日?qǐng)?bào)周刊合集 | ?? 生產(chǎn)力工具與行業(yè)應(yīng)用大全 | ?? 點(diǎn)贊關(guān)注評(píng)論拜托啦! 作者在這篇文章中探討了生成式AI在虛擬世界的應(yīng)用,并繪制了 Market Map V3.0 (市場全景圖),來展示 Experiences 、 Discovery、Creator Economy、Spatial Computing、Decentralization、Human Interface、Infrastructure 各部分

    2024年02月09日
    瀏覽(25)
  • 【vue-element-admin】github高質(zhì)量vue項(xiàng)目解讀,小白都能看懂(第三篇)

    【vue-element-admin】github高質(zhì)量vue項(xiàng)目解讀,小白都能看懂(第三篇)

    日月幾何,天地玄黃,今日奇觀,書接上一回。 這次我們來講 panel-group / 組件 因?yàn)楸疚氖歉?xiàng)目來的,所以不從第一篇看起的小伙伴云里霧里,所以針對(duì)以上情況,我決定對(duì)于 vue-element-admin 項(xiàng)目出現(xiàn)的大部分技術(shù)棧以及知識(shí)點(diǎn)(比如:element-ui,echarts,vuex等等)進(jìn)行講解

    2024年02月02日
    瀏覽(26)
  • 基于蟻群算法的機(jī)器人路徑規(guī)劃matlab——代碼注釋超級(jí)詳細(xì),都能看懂

    本文對(duì)基本蟻群算法代碼進(jìn)行了詳細(xì)的注釋,每一步都簡單易懂。程序在matlab中可直接運(yùn)行,適合剛開始學(xué)習(xí)本算法的同學(xué)入門。 蟻群算法是由意大利學(xué)者Dorigo提出的一種仿生智能算法,最早運(yùn)用在旅行商問題上。蟻群算法模仿螞蟻覓食過程設(shè)計(jì)出的智能啟發(fā)式算法,螞蟻覓

    2024年02月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包