gtest
google test (簡稱gtest) 是 google 開發的一個 c++單元測試框架,它能幫助開發者編寫可移植、可維護的單元測試代碼。
1、安裝gtest
# 克隆倉庫 git clone https://github.com/google/googletest.git cd googletest # 創建構建目錄 mkdir build cd build # 生成構建文件 cmake .. # 編譯 make # 安裝(可能需要管理員權限) sudo make install
2 Google Test基礎語法
2.1 斷言
Google Test提供了一系列的斷言宏來檢查條件是否滿足。如果斷言失敗,測試用例被認為失敗。斷言分為兩大類:ASSERT_* 和 EXPECT_*。
ASSERT_*版本在斷言失敗時會產生一個致命錯誤,并終止當前函數的執行。包括ASSERT_TRUE,ASSERT_FALSE,ASSERT_EQ等EXPECT_*版本在斷言失敗時會產生一個非致命錯誤,當前函數會繼續執行,這允許測試多個條件。包括EXPECT_TRUE,EXPECT_FALSE,EXPECT_EQ等
2.2 測試用例和測試套件
2.2.1 測試用例
測試用例(Test Case):是指一組相關測試的集合。在Google Test中,使用 TEST() 宏來定義一個不需要額外的設置或清理過程的簡單測試用例。使用 TEST 時,只需提供測試案例名稱和測試名稱,然后編寫測試代碼塊。案例如下
TEST(RbTreeTest, InsertTEST) { // 測試代碼在這里 EXPECT_EQ(1, 1); // 一個示例斷言 }
其中TEST宏后的2個參數唯一標記了一個測試用例, 第一個參數可以重復, 但2個參數不能同時重復。
使用 TEST,每個測試是獨立的,測試之間不共享任何狀態。這個宏適合于無狀態的測試,或者不需要為多個測試維護一個共同的環境時。
2.2.2 測試套件
測試套件(Test Suite):在更早的Google Test版本中,測試套件是指具有相同前綴的一組測試用例的集合。在新版本中,使用 TEST_F() 宏來定義測試套件,并且需要定義一個測試固件(Fixture)類。
TEST_F 宏在有一個測試固件時使用,測試固件是一種用來重用相同的設置和清理代碼為多個測試服務的方法。測試固件通過一個從 ::testing::Test 派生的類來定義。然后,可以重寫 SetUp 和 TearDown 方法來初始化和清理測試環境。
下面是一個使用 TEST_F 的例子:
// 定義測試固件 class MyTestFixture : public ::testing::Test { protected: void SetUp() override { // 設置測試環境的代碼 } void TearDown() override { // 清理測試環境的代碼 } }; // 使用 TEST_F 編寫使用測試固件的測試 TEST_F(MyTestFixture, 測試名稱) { // 可以使用設置好的環境的測試代碼 EXPECT_EQ(1, 1); // 一個示例斷言 }
:使用 TEST_F,同一個固件內的每個測試按照它們定義的順序運行,但Google Test確保每個測試是隔離的;也就是說,在每個測試之前,環境都會重置為通過 SetUp 建立的初始狀態。這樣,一個測試所做的改變不會影響到另一個測試。

浙公網安備 33010602011771號