介紹
Google Test(GTest)是 Google 開源的 C++ 單元測試框架,它提供了簡單易用的斷言、測試夾具(Fixtures)和測試運行機制,使 C++ 開發者能夠編寫高效的單元測試。
本博客將介紹如何在 macOS 上使用 CLion 配置 Google Test 進行 C++ 單元測試,包括安裝 Google Test、配置 CMakeLists.txt、編寫和運行測試代碼,以及如何測試類和使用測試夾具。
1. 安裝 Google Test
Google Test 在 macOS 上可以使用 Homebrew
安裝:
brew install googletest
安裝完成后,庫文件通常會存放在 /usr/local/Cellar/googletest/
目錄下(具體路徑可通過 brew info googletest
查看)。
2. 創建 CLion 項目
- 打開 CLion,選擇
New Project
。 - 選擇
C++ Executable
,然后點擊Create
創建一個項目。
3. 配置 CMakeLists.txt
方式 1:使用 Homebrew 安裝的 Google Test
如果通過 brew install googletest
安裝了 Google Test,可以這樣配置 CMakeLists.txt:
cmake_minimum_required(VERSION 3.30)
project(MyGoogleTestProject)set(CMAKE_CXX_STANDARD 20)# 查找 Google Test
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})# 添加測試文件
add_executable(MyGoogleTestProject main.cpp)# 鏈接 Google Test 庫
target_link_libraries(MyGoogleTestProject GTest::GTest GTest::Main pthread)# 啟用測試
enable_testing()
add_test(NAME MyGoogleTestProject COMMAND MyGoogleTestProject)
方式 2:使用 Git 方式引入 Google Test
如果希望將 Google Test 作為項目的一部分,可以在 CMakeLists.txt
中手動拉取 Google Test:
cmake_minimum_required(VERSION 3.10)
project(MyGoogleTestProject)set(CMAKE_CXX_STANDARD 17)# 下載 Google Test(如果未安裝)
include(FetchContent)
FetchContent_Declare(googletestURL https://github.com/google/googletest/archive/refs/heads/main.zip
)
FetchContent_MakeAvailable(googletest)# 添加測試源碼文件
add_executable(my_test test.cpp)# 鏈接 Google Test
target_link_libraries(my_test gtest gtest_main)# 啟用測試
enable_testing()
4. 編寫測試代碼
在項目根目錄下創建 main.cpp
文件,并編寫測試代碼,例如:
#include <gtest/gtest.h>// 測試函數
int Add(int nA, int nB) {return nA + nB;
}// 測試用例
TEST(AddTest, HandlesPositiveNumbers) {EXPECT_EQ(Add(2, 3), 5);
}TEST(AddTest, HandlesNegativeNumbers) {EXPECT_EQ(Add(-2, -3), -5);
}// 主函數
int main(int argc, char **argv) {::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}
如果需要測試類的成員函數如下:
- 創建 Calculator 類,該類提供加法和減法功能。
- 編寫 Google Test 測試。
Calculator 類的頭文件:
#ifndef CALCULATOR_H
#define CALCULATOR_Hclass Calculator {
public:int Add(int nA, int nB);int Subtract(int nA, int nB);
};#endif // CALCULATOR_H
Calculator 類的源文件:
#include "Calculator.h"int Calculator::Add(int nA, int nB) {return nA + nB;
}int Calculator::Subtract(int nA, int nB) {return nA - nB;
}
為 Calculator 編寫測試,創建 calculator_test.cpp 文件:
#include <gtest/gtest.h>
#include "Calculator.h"// 測試 Add 方法
TEST(CalculatorTest, HandlesAddition) {Calculator calculator;EXPECT_EQ(calculator.Add(3, 4), 7);EXPECT_EQ(calculator.Add(-2, -5), -7);EXPECT_EQ(calculator.Add(10, -5), 5);
}// 測試 Subtract 方法
TEST(CalculatorTest, HandlesSubtraction) {Calculator calculator;EXPECT_EQ(calculator.Subtract(10, 3), 7);EXPECT_EQ(calculator.Subtract(5, 8), -3);EXPECT_EQ(calculator.Subtract(-5, -10), 5);
}
測試類的成員函數的結果:
5. 運行 Google Test
方法 1:手動運行
在 CLion 終端中執行:
cmake --build .
./MyGoogleTestProject
你應該會看到 Google Test 的輸出結果。
方法 2:CLion 直接運行
-
在 CLion 運行
-
使用 Google Test 配置
- 點擊 CLion 頂部菜單 “Run” > “Edit Configurations…”
- 點擊 “+” 號,選擇 Google Test
- 選擇
Target
,然后應用并運行
-
查看測試結果
在 CLion 底部的 “Test Runner” 窗口,你可以看到測試是否通過。
6. 添加更多測試
如果你有多個測試文件,比如 math_test.cpp
和 string_test.cpp
,可以這樣修改 CMakeLists.txt
:
add_executable(math_test math_test.cpp)
add_executable(string_test string_test.cpp)target_link_libraries(math_test GTest::GTest GTest::Main)
target_link_libraries(string_test GTest::GTest GTest::Main)add_test(NAME MathTest COMMAND math_test)
add_test(NAME StringTest COMMAND string_test)
然后在終端運行:
ctest
這樣可以一次性運行所有測試。
7. 處理 Google Test 斷言
Google Test 斷言分為 ASSERT_ 和 EXPECT_:
EXPECT_EQ(a, b)
: 繼續運行,報告錯誤ASSERT_EQ(a, b)
: 立即終止當前測試
例如:
TEST(SampleTest, Example) {ASSERT_EQ(1, 1); // 通過EXPECT_EQ(1, 2); // 失敗,但繼續執行ASSERT_EQ(1, 2); // 失敗,測試終止
}
8. 使用 Google Test Fixtures
Google Test 提供 Fixture(測試夾具),用于在多個測試用例間共享資源:
class MyTestFixture : public ::testing::Test {
protected:void SetUp() override { nValue = 5; } // 每個測試前執行void TearDown() override { } // 每個測試后執行int nValue;
};TEST_F(MyTestFixture, TestAddition) {EXPECT_EQ(nValue + 5, 10);
}
總結
- 安裝 Google Test (
brew install googletest
或 CMakeFetchContent
) - 配置 CMakeLists.txt
- 編寫 Google Test 代碼
- 運行 Google Test
- 在 CLion 進行 Google Test 配置
- 使用 CTest 運行所有測試
- 使用斷言
EXPECT_
/ASSERT_
- 使用 Test Fixture 進行高級測試
這樣,你就能在 macOS + CLion 環境下使用 Google Test 進行 C++ 單元測試了!🚀