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(expected, actual); | EXPECT_EQ(expected, actual); | expected == actual |
ASSERT_NE(val1, val2); | EXPECT_NE(val1, val2); | val1 != val2 |
ASSERT_LT(val1, val2); | EXPECT_LT(val1, val2); | val1 < val2 |
ASSERT_LE(val1, val2); | EXPECT_LE(val1, val2); | val1 <= val2 |
ASSERT_GT(val1, val2); | EXPECT_GT(val1, val2); | val1 > val2 |
ASSERT_GE(val1, val2); | EXPECT_GE(val1, val2); | val1 >= val2 |
(3)字符串檢查
Fatal assertion | Nonfatal assertion | Verifies |
ASSERT_STREQ(expected_str, actual_str); | EXPECT_STREQ(expected_str, actual_str); | the two C strings have the same content |
ASSERT_STRNE(str1, str2); | EXPECT_STRNE(str1, str2); | the two C strings have different content |
ASSERT_STRCASEEQ(expected_str, actual_str); | EXPECT_STRCASEEQ(expected_str, actual_str); | the two C strings have the same content, ignoring case |
ASSERT_STRCASENE(str1, str2); | EXPECT_STRCASENE(str1, str2); | 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(statement, exception_type); | EXPECT_THROW(statement, exception_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)之八 - 打造自己的單元測試框架
額外篇:
3.gtest 參數化測試代碼示例 (內含完整工程示例)