單元測試 : Googel test測試框架

1、什麼是gtest

       gtest是一個跨平臺的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++單元測試框架,由google公司發佈。gtest是爲在不同平臺上爲編寫C++測試而生成的。它提供了豐富的斷言、致命和非致命判斷、參數化、”死亡測試”等等。

TEST(test_case_name, test_name)
TEST_F(test_fixture,test_name) //多個測試場景需要相同數據配置的情況,用TEST_F。TEST_F test fixture,測試夾具,測試套,承擔了一個註冊的功能。

      TEST_F(test_fixture,test_name) //多個測試場景需要相同數據配置的情況,用 TEST_F 。TEST_F test fixture,測試夾具,測試套,承擔了一個註冊的功能。

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

2、gtest系列之斷言

gtest中斷言的宏可以分爲兩類:一類是ASSERT宏,另一類就是EXPECT宏了。

1、ASSERT_*系列:如果當前點檢測失敗則退出當前函數

2、EXPECT_*系列:如果當前點檢測失敗則繼續往下執行

   斷言類型如下:

(1)布爾值檢查

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

(2)數值型數據檢查

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(expectedactual); EXPECT_EQ(expectedactual); expected == actual
ASSERT_NE(val1val2); EXPECT_NE(val1val2); val1 != val2
ASSERT_LT(val1val2); EXPECT_LT(val1val2); val1 < val2
ASSERT_LE(val1val2); EXPECT_LE(val1val2); val1 <= val2
ASSERT_GT(val1val2); EXPECT_GT(val1val2); val1 > val2
ASSERT_GE(val1val2); EXPECT_GE(val1val2); val1 >= val2

(3)字符串檢查

Fatal assertion Nonfatal assertion Verifies
ASSERT_STREQ(expected_stractual_str); EXPECT_STREQ(expected_stractual_str); the two C strings have the same content
ASSERT_STRNE(str1str2); EXPECT_STRNE(str1str2); the two C strings have different content
ASSERT_STRCASEEQ(expected_stractual_str); EXPECT_STRCASEEQ(expected_stractual_str); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1str2); EXPECT_STRCASENE(str1str2); the two C strings have different content, ignoring case

(4)顯示返回成功或失敗

      直接返回成功:SUCCEED();

      返回失敗:

Fatal assertion Nonfatal assertion
FAIL(); ADD_FAILURE();

(5)異常檢查

Fatal assertion Nonfatal assertion Verifies
ASSERT_THROW(statementexception_type); EXPECT_THROW(statementexception_type); statement throws an exception of the given type
ASSERT_ANY_THROW(statement); EXPECT_ANY_THROW(statement); statement throws an exception of any type
ASSERT_NO_THROW(statement); EXPECT_NO_THROW(statement); statement doesn't throw any exception

(6)Predicate Assertions

      在使用EXPECT_TRUE或ASSERT_TRUE時,有時希望能夠輸出更加詳細的信息,比如檢查一個函數的返回值TRUE還是FALSE時,希望能夠輸出傳入的參數是什麼,以便失敗後好跟蹤。因此提供瞭如下的斷言:

Fatal assertion Nonfatal assertion Verifies
ASSERT_PRED1(pred1, val1); EXPECT_PRED1(pred1, val1); pred1(val1) returns true
ASSERT_PRED2(pred2, val1, val2); EXPECT_PRED2(pred2, val1, val2); pred2(val1, val2) returns true
... ... ...

 

參考:

系列鏈接:

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

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

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

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

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

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

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

8.玩轉Google開源C++單元測試框架Google Test系列(gtest)之八 - 打造自己的單元測試框架

額外篇:

1.gtest中如何跳出當前測試案例

2.編寫優美的GTest測試案例

3.gtest 參數化測試代碼示例 (內含完整工程示例)

4.gtest的介紹和使用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章