gtest


更通用的做法是:不必在每個平台下分別編譯生成靜態庫,可以直接使用/fused-src/gtest下的gtest.h和gtest-all.cc兩個文件,此兩個文件包含了所有你需要用到的Google Test的東西。如果沒有/fuse-src這個文件,可以使用/scripts/fuse_gtest_files.py這個文件生成,操作步驟是:(1)、配置好python;(2)、打開命令提示符,將其定位到/scripts文件夾下,輸入命令:python  fuse_gtest_files.py fused_gtest ;會在/scripts文件夾下生成一個fused_gtest/gtest文件,里面包含gtest.h和gtest-all.cc兩個文件,此兩個文件和/fuse-src中的同名文件內容是完全一致的。

 

下面是對gtest的一些總結:

1.  TEST(test_case_name, test_name)

TEST_F(test_fixture,test_name)

TEST宏的作用是創建一個簡單測試,它定義了一個測試函數,在這個函數里可以使用任何C++代碼並使用提供的斷言來進行檢查。

多個測試場景需要相同數據配置的情況,用TEST_F。

2.  gtest中,斷言的宏可以分為兩類,一類是ASSERT系列,一類是EXPECT系列。

{ASSERT|EXPECT}_EQ(expected,actual): Tests that expected == actual

{ASSERT|EXPECT}_NE(v1,v2):           Tests that v1 != v2

{ASSERT|EXPECT}_LT(v1,v2):           Tests that v1 < v2

{ASSERT|EXPECT}_LE(v1,v2):           Tests that v1 <= v2

{ASSERT|EXPECT}_GT(v1,v2):           Tests that v1 > v2

{ASSERT|EXPECT}_GE(v1,v2):           Tests that v1 >= v2

EXPECT_*和ASSERT_*的區別:(1)、EXPECT_*失敗時,案例繼續往下執行;(2)、ASSERT_*失敗時,直接在當前函數中返回,當前函數中ASSERT_*后面的語句將不會執行,退出當前函數,並非退出當前案例。

斷言:布爾值檢查、數值型數據檢查、字符串檢查、顯示成功或失敗、異常檢查、Predicate Assertions、浮點型檢查、Windows HRESULT assertions、類型檢查。

3.  ::testing::InitGoogleTest(&argc,argv):gtest的測試案例允許接收一系列的命令行參數,將命令行參數傳遞給gtest,進行一些初始化操作。gtest的命令行參數非常豐富。

4.  RUN_ALL_TESTS():運行所有測試案例。

5.  可以通過操作符"<<"將一些自定義的信息輸出,如在EXPECT_EQ(v1, v2)<< "thisis a error! "

 

6.  gtest的事件一共有3種:(1)、全局的,所有案例執行前后;(2)、TestSuite級別的,在某一批案例中第一個案例前,最后一個案例執行后;(3)、TestCase級別的,每個TestCase前后。

全局事件:要實現全局事件,必須寫一個類,繼承testing::Environment類,實現里面的SetUp和TearDown方法。SetUp方法在所有案例執行前執行;TearDown方法在所有案例執行后執行。

TestSuite事件:需要寫一個類,繼承testing::Test,然后實現兩個靜態方法:(1)、SetUpTestCase方法在第一個TestCase之前執行;(2)、TearDownTestCase方法在最后一個TestCase之后執行。

TestCase事件:是掛在每個案例執行前后的,需要實現的是SetUp方法和TearDown方法。(1)、SetUp方法在每個TestCase之前執行;(2)、TearDown方法在每個TestCase之后執行。

每個基於gtest的測試過程,是可以分為多個TestSuite級別,而每個TestSuite級別又可以分為多個TestCase級別。這樣分層的結構的好處,是可以針對不同的TestSuite級別或者TestCase級別設置不同的參數、事件機制等,並且可以與實際測試的各個模塊層級相互對應,便於管理。

7.  參數化:必須添加一個類,繼承testing::TestWithParam<T>,其中T就是你需要參數化的參數類型。

8.  編寫死亡測試案例時,TEST的第一個參數,即test_case_name,請使用DeathTest后綴,原因是gtest會優先運行死亡測試案例,應該是為線程安全考慮。

9.  testing::AddGlobalTestEnvironment(newFooEnvironment):在main函數中創建和注冊全局環境對象。

10.  對於運行參數,gtest提供了三種設置的途徑:(1)、系統環境變量;(2)、命令行參數;(3)、代碼中指定FLAG。

命令行參數:(1)、--gtest_list_tests:使用這個參數時,將不會執行里面的測試案例,而是輸出一個案例的列表;(2)、--gtest_filter:對執行的測試案例進行過濾,支持通配符;(3)、--gtest_also_run_disabled_tests:執行案例時,同時也執行被置為無效的測試案例;(4)、--gtest_repeat=[COUNT]:設置案例重復運行次數;(5)、--gtest_color=(yes|no|auto):輸出命令行時是否使用一些五顏六色的顏色,默認是auto;(6)、--gtest_print_time:輸出命令時是否打印每個測試案例的執行時間,默認是不打印的;(7)、--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH:將測試結果輸出到一個xml中,如—gtest_output=xml:d:\foo.xml  指定輸出到d:\foo.xml ,如果不是指定了特定的文件路徑,gtest每次輸出的報告不會覆蓋,而會以數字后綴的方式創建;(8)、--gtest_break_on_failure:調試模式下,當案例失敗時停止,方便調試;(9)、--gtest_throw_on_failure:當案例失敗時以C++異常的方式拋出;(10)、--gtest_catch_exceptions:是否捕捉異常,gtest默認是不捕捉異常的,這個參數只在Windows下有效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM