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

玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之六 - 運(yùn)行參數(shù)

這篇具有很好參考價值的文章主要介紹了玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之六 - 運(yùn)行參數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

一、前言

二、基本介紹

三、參數(shù)列表

四、XML報告輸出格式

五、總結(jié)




一、前言

使用gtest編寫的測試案例通常本身就是一個可執(zhí)行文件,因此運(yùn)行起來非常方便。同時,gtest也為我們提供了一系列的運(yùn)行參數(shù)(環(huán)境變量、命令行參數(shù)或代碼里指定),使得我們可以對案例的執(zhí)行進(jìn)行一些有效的控制。

二、基本介紹

前面提到,對于運(yùn)行參數(shù),gtest提供了三種設(shè)置的途徑:

  • 1. 系統(tǒng)環(huán)境變量
  • 2. 命令行參數(shù)
  • 3. 代碼中指定FLAG

因?yàn)樘峁┝巳N途徑,就會有優(yōu)先級的問題, 有一個原則是,最后設(shè)置的那個會生效。不過總結(jié)一下,通常情況下,比較理想的優(yōu)先級為:

命令行參數(shù) > 代碼中指定FLAG > 系統(tǒng)環(huán)境變量

為什么我們編寫的測試案例能夠處理這些命令行參數(shù)呢?是因?yàn)槲覀冊趍ain函數(shù)中,將命令行參數(shù)交給了gtest,由gtest來搞定命令行參數(shù)的問題。

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

這樣,我們就擁有了接收和響應(yīng)gtest命令行參數(shù)的能力。如果需要在代碼中指定FLAG,可以使用testing::GTEST_FLAG這個宏來設(shè)置。比如相對于命令行參數(shù)--gtest_output,可以使用testing::GTEST_FLAG(output) = "xml:";來設(shè)置。注意到了,不需要加--gtest前綴了。同時,推薦將這句放置InitGoogleTest之前,這樣就可以使得對于同樣的參數(shù),命令行參數(shù)優(yōu)先級高于代碼中指定。

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

最后再來說下第一種設(shè)置方式-系統(tǒng)環(huán)境變量。如果需要gtest的設(shè)置系統(tǒng)環(huán)境變量,必須注意的是:

1. 系統(tǒng)環(huán)境變量全大寫,比如對于--gtest_output,響應(yīng)的系統(tǒng)環(huán)境變量為:GTEST_OUTPUT

2.? 有一個命令行參數(shù)例外,那就是--gtest_list_tests,它是不接受系統(tǒng)環(huán)境變量的。(只是用來羅列測試案例名稱)

三、參數(shù)列表

了解了上面的內(nèi)容,我這里就直接將所有命令行參數(shù)總結(jié)和羅列一下。如果想要獲得詳細(xì)的命令行說明,直接運(yùn)行你的案例,輸入命令行參數(shù):/? 或 --help 或 -help

1. 測試案例集合

命令行參數(shù) 說明
--gtest_list_tests 使用這個參數(shù)時,將不會執(zhí)行里面的測試案例,而是輸出一個案例的列表。
--gtest_filter

對執(zhí)行的測試案例進(jìn)行過濾,支持通配符

???? 單個字符

*??? 任意字符

- ?? 排除,如,-a 表示除了a

:??? 取或,如,a:b 表示a或b

比如下面的例子:

./foo_test 沒有指定過濾條件,運(yùn)行所有案例
./foo_test --gtest_filter=* 使用通配符*,表示運(yùn)行所有案例
./foo_test --gtest_filter=FooTest.* 運(yùn)行所有“測試案例名稱(testcase_name)”為FooTest的案例
./foo_test --gtest_filter=*Null*:*Constructor* 運(yùn)行所有“測試案例名稱(testcase_name)”或“測試名稱(test_name)”包含Null或Constructor的案例。
./foo_test --gtest_filter=-*DeathTest.* 運(yùn)行所有非死亡測試案例。
./foo_test --gtest_filter=FooTest.*-FooTest.Bar 運(yùn)行所有“測試案例名稱(testcase_name)”為FooTest的案例,但是除了FooTest.Bar這個案例

--gtest_also_run_disabled_tests

執(zhí)行案例時,同時也執(zhí)行被置為無效的測試案例。關(guān)于設(shè)置測試案例無效的方法為:

在測試案例名稱或測試名稱中添加DISABLED前綴,比如:

gtest_output,11_質(zhì)量保證篇,單元測試

//?Tests?that?Foo?does?Abc.
TEST(FooTest,?DISABLED_DoesAbc)?{??}

class?DISABLED_BarTest?:?public?testing::Test?{??};

//?Tests?that?Bar?does?Xyz.
TEST_F(DISABLED_BarTest,?DoesXyz)?{??}
--gtest_repeat=[COUNT]

設(shè)置案例重復(fù)運(yùn)行次數(shù),非常棒的功能!比如:

--gtest_repeat=1000 ?? ? 重復(fù)執(zhí)行1000次,即使中途出現(xiàn)錯誤。
--gtest_repeat=-1 ???????? 無限次數(shù)執(zhí)行。。。。
--gtest_repeat=1000 --gtest_break_on_failure ??? 重復(fù)執(zhí)行1000次,并且在第一個錯誤發(fā)生時立即停止。這個功能對調(diào)試非常有用。
--gtest_repeat=1000 --gtest_filter=FooBar ??? 重復(fù)執(zhí)行1000次測試案例名稱為FooBar的案例。

2. 測試案例輸出

命令行參數(shù) 說明
--gtest_color=(yes|no|auto) 輸出命令行時是否使用一些五顏六色的顏色。默認(rèn)是auto。
--gtest_print_time 輸出命令行時是否打印每個測試案例的執(zhí)行時間。默認(rèn)是不打印的。
--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH]

將測試結(jié)果輸出到一個xml中。

1.--gtest_output=xml: ?? 不指定輸出路徑時,默認(rèn)為案例當(dāng)前路徑。

2.--gtest_output=xml:d:\ 指定輸出到某個目錄

3.--gtest_output=xml:d:\foo.xml 指定輸出到d:\foo.xml

如果不是指定了特定的文件路徑,gtest每次輸出的報告不會覆蓋,而會以數(shù)字后綴的方式創(chuàng)建。xml的輸出內(nèi)容后面介紹吧。

3. 對案例的異常處理

命令行參數(shù) 說明
--gtest_break_on_failure 調(diào)試模式下,當(dāng)案例失敗時停止,方便調(diào)試
--gtest_throw_on_failure 當(dāng)案例失敗時以C++異常的方式拋出
--gtest_catch_exceptions

是否捕捉異常。gtest默認(rèn)是不捕捉異常的,因此假如你的測試案例拋了一個異常,很可能會彈出一個對話框,這非常的不友好,同時也阻礙了測試案例的運(yùn)行。如果想不彈這個框,可以通過設(shè)置這個參數(shù)來實(shí)現(xiàn)。如將--gtest_catch_exceptions設(shè)置為一個非零的數(shù)。

注意:這個參數(shù)只在Windows下有效。

四、XML報告輸出格式

<?xml?version="1.0"?encoding="UTF-8"?>
<testsuites?tests="3"?failures="1"?errors="0"?time="35"?name="AllTests">
??<testsuite?name="MathTest"?tests="2"?failures="1"*?errors="0"?time="15">
????<testcase?name="Addition"?status="run"?time="7"?classname="">
??????<failure?message="Value?of:?add(1,?1) ?Actual:?3 Expected:?2"?type=""/>
??????<failure?message="Value?of:?add(1,?-1) ?Actual:?1 Expected:?0"?type=""/>
????</testcase>
????<testcase?name="Subtraction"?status="run"?time="5"?classname="">
????</testcase>
??</testsuite>
??<testsuite?name="LogicTest"?tests="1"?failures="0"?errors="0"?time="5">
????<testcase?name="NonContradiction"?status="run"?time="5"?classname="">
????</testcase>
??</testsuite>
</testsuites>

從報告里可以看出,我們之前在TEST等宏中定義的測試案例名稱(testcase_name)在xml測試報告中其實(shí)是一個testsuite name,而宏中的測試名稱(test_name)在xml測試報告中是一個testcase name,概念上似乎有點(diǎn)混淆,就看你怎么看吧。

當(dāng)檢查點(diǎn)通過時,不會輸出任何檢查點(diǎn)的信息。當(dāng)檢查點(diǎn)失敗時,會有詳細(xì)的失敗信息輸出來failure節(jié)點(diǎn)。

在我使用過程中發(fā)現(xiàn)一個問題,當(dāng)我同時設(shè)置了--gtest_filter參數(shù)時,輸出的xml報告中還是會包含所有測試案例的信息,只不過那些不被執(zhí)行的測試案例的status值為“notrun”。而我之前認(rèn)為的輸出的xml報告應(yīng)該只包含我需要運(yùn)行的測試案例的信息。不知是否可提供一個只輸出需要執(zhí)行的測試案例的xml報告。因?yàn)楫?dāng)我需要在1000個案例中執(zhí)行其中1個案例時,在報告中很難找到我運(yùn)行的那個案例,雖然可以查找,但還是很麻煩。

五、總結(jié)

本篇主要介紹了gtest案例執(zhí)行時提供的一些參數(shù)的使用方法,這些參數(shù)都非常有用。在實(shí)際編寫gtest測試案例時肯定會需要用到的時候。至少我現(xiàn)在比較常用的運(yùn)行參數(shù)就是:

1. --gtest_filter

2. --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH]

3. --gtest_catch_exceptions

最后再總結(jié)一下我使用過程中遇到的幾個問題:

1. 同時使用--gtest_filter和--gtest_output=xml:時,在xml測試報告中能否只包含過濾后的測試案例的信息。

2. 有時,我在代碼中設(shè)置 testing::GTEST_FLAG(catch_exceptions) = 1和我在命令行中使用--gtest_catch_exceptions結(jié)果稍有不同,在代碼中設(shè)置FLAG方式有時候捕捉不了某些異常,但是通過命令行參數(shù)的方式一般都不會有問題。這是我曾經(jīng)遇到過的一個問題,最后我的處理辦法是既在代碼中設(shè)置FLAG,又在命令行參數(shù)中傳入--gtest_catch_exceptions。不知道是gtest在catch_exceptions方面不夠穩(wěn)定,還是我自己測試案例的問題。

系列鏈接:

1.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之一 - 初識gtest

2.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之二 - 斷言

3.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之三 - 事件機(jī)制

4.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之四 - 參數(shù)化

5.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試

6.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之六 - 運(yùn)行參數(shù)

7.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之七 - 深入解析gtest

8.玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之八 - 打造自己的單元測試框架文章來源地址http://www.zghlxwxcb.cn/news/detail-721877.html

到了這里,關(guān)于玩轉(zhuǎn)Google開源C++單元測試框架Google Test系列(gtest)之六 - 運(yùn)行參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 技術(shù)貼 | 一文掌握 Google Test 框架

    技術(shù)貼 | 一文掌握 Google Test 框架

    1. 引言 在開發(fā)過程中,如何保證代碼的質(zhì)量以及程序的正確性成為了我們亟需解決的問題,其中測試用例成為了不必可少的一部分。測試用例不僅可以幫助我們驗(yàn)證代碼的正確性,還能幫助我們捕獲潛在的錯誤,提高代碼的可靠性和可維護(hù)性。然而手動編寫和執(zhí)行測試用例可

    2024年02月07日
    瀏覽(45)
  • 【JUnit技術(shù)專題】「入門到精通系列」手把手+零基礎(chǔ)帶你玩轉(zhuǎn)單元測試,讓你的代碼更加“強(qiáng)壯”(場景化測試篇)

    【JUnit技術(shù)專題】「入門到精通系列」手把手+零基礎(chǔ)帶你玩轉(zhuǎn)單元測試,讓你的代碼更加“強(qiáng)壯”(場景化測試篇)

    測試套件將多個單元測試用例捆綁在一起并進(jìn)行集中執(zhí)行。在JUnit中,可以使用@RunWith和@Suite注解來實(shí)現(xiàn)測試套件的運(yùn)行。 下面的示例包含TestJunit1和TestJunit2兩個測試類,我們將使用測試套件來一起運(yùn)行這兩個測試類: 創(chuàng)建一個類 創(chuàng)建一個待測試的Java類,命名為MessageUtil.ja

    2024年02月03日
    瀏覽(84)
  • 【JUnit技術(shù)專題】「入門到精通系列」手把手+零基礎(chǔ)帶你玩轉(zhuǎn)單元測試,讓你的代碼更加“強(qiáng)壯”(實(shí)戰(zhàn)開發(fā)篇)

    本節(jié)內(nèi)容主要介紹JUnit單元測試功能框架,并以實(shí)戰(zhàn)演練的形式進(jìn)行講解。本系列教程主要針對代碼編程方式和模型,重點(diǎn)講解實(shí)戰(zhàn)代碼開發(fā)。通過本系列教程的學(xué)習(xí),您將能夠深入了解JUnit單元測試框架的使用和原理,并掌握如何在實(shí)際項(xiàng)目中運(yùn)用JUnit進(jìn)行單元測試。 以下是

    2024年02月03日
    瀏覽(105)
  • C++輕量級單元測試框架

    單元測試是構(gòu)建穩(wěn)定、高質(zhì)量的程序、服務(wù)或系統(tǒng)的必不可少的一環(huán)。通過單元測試,我們可以在開發(fā)過程中及時發(fā)現(xiàn)和修復(fù)代碼中的問題,提高代碼的質(zhì)量和可維護(hù)性。同時,單元測試也可以幫助我們更好地理解代碼的功能和實(shí)現(xiàn)細(xì)節(jié),從而更好地進(jìn)行代碼重構(gòu)和優(yōu)化。

    2023年04月25日
    瀏覽(89)
  • 用 GPT-4 給開源項(xiàng)目 GoPool 重構(gòu)測試代碼 - 每天5分鐘玩轉(zhuǎn) GPT 編程系列(8)

    用 GPT-4 給開源項(xiàng)目 GoPool 重構(gòu)測試代碼 - 每天5分鐘玩轉(zhuǎn) GPT 編程系列(8)

    目錄 1. 好險,差點(diǎn)被噴 2. 重構(gòu)測試代碼 2.1 引入 Ginkgo 測試框架 2.2 嘗試改造舊的測試用例 2.3 重構(gòu)功能測試代碼 3. 總結(jié) 早幾天發(fā)了一篇文章:《僅三天,我用 GPT-4 生成了性能全網(wǎng)第一的 Golang Worker Pool,輕松打敗 GitHub 萬星項(xiàng)目》,這標(biāo)題是挺容易被懟,哇咔咔;不過最終“

    2024年02月12日
    瀏覽(31)
  • 一文掌握谷歌 C++ 單元測試框架 GoogleTest

    一文掌握谷歌 C++ 單元測試框架 GoogleTest

    GoogleTest GoogleTest(簡稱 GTest) 是 Google 開源的一個跨平臺的(Liunx、Mac OS X、Windows等)的 C++ 單元測試框架,可以幫助程序員測試 C++ 程序的結(jié)果預(yù)期。不僅如此,它還提供了豐富的斷言、致命和非致命判斷、參數(shù)化、”死亡測試”等等。 GoogleTest 官網(wǎng):https://google.github.io/go

    2024年02月03日
    瀏覽(16)
  • 一個簡單好用的C++語言單元測試框架-GoogleTest

    GoogleTest 是由 Google 開發(fā)的一個用于編寫 C++ 單元測試的框架。單元測試中單元的含義,單元就是人為規(guī)定的最小的被測功能模塊,如C語言中單元指一個函數(shù),Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。在實(shí)際項(xiàng)目中,單元測試往往由開發(fā)人員完成。

    2024年01月19日
    瀏覽(45)
  • GO——單元測試(test)

    go test用來做什么 做單元測試,測試函數(shù)是否符合預(yù)期 go test在哪個包 testing 如何使用 參考: https://geektutu.com/post/quick-go-test.html 以 my_func.go 中的Add方法為例 在同一個文件夾下添加my_func_test.go文件 測試文件以_test.go為結(jié)尾 里面的測試方法以Test開頭,但是不一定是要跟方法名,

    2024年01月20日
    瀏覽(29)
  • 特性介紹 | MySQL 測試框架 MTR 系列教程(二):進(jìn)階篇 - 內(nèi)存/線程/代碼覆蓋率/單元/壓力測試

    作者:盧文雙 資深數(shù)據(jù)庫內(nèi)核研發(fā) 序言: 以前對 MySQL 測試框架 MTR 的使用,主要集中于 SQL 正確性驗(yàn)證。近期由于工作需要,深入了解了 MTR 的方方面面,發(fā)現(xiàn) MTR 的能力不僅限于此,還支持單元測試、壓力測試、代碼覆蓋率測試、內(nèi)存錯誤檢測、線程競爭與死鎖等功能,因

    2024年02月03日
    瀏覽(25)
  • 仿真與測試:單元測試與Test Harness

    仿真與測試:單元測試與Test Harness

    本文描述單元測試的概念,以及Test Harness建立的方法和簡單的單元測試過程。 單元測試,簡單來說就是在Simulink模型中只測試一小部分單元的功能。關(guān)于單元測試的概念網(wǎng)上有很多資料了,這里不再贅述。博主從實(shí)際工作經(jīng)驗(yàn)的角度來談?wù)剢卧獪y試的價值。 舉個簡單的例子,

    2024年02月04日
    瀏覽(83)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包