C++單元測試目前用的較多的是gtest(google test),新一點(diǎn)的還有catch2。
1 測試工具
gtest
gtest是Google開發(fā)的一個(gè)C++單元測試框架,除了基本單元測試框架功能外,還有專門的mock框架gmock,支持模擬對象和函數(shù)。gtest具有以下特點(diǎn):
- x-Unit風(fēng)格框架,并且支持測試用例發(fā)現(xiàn),不再需要顯示的注冊測試用例。
- 斷言豐富,支持自定義斷言
- 功能豐富,帶有專門的mock工具,支持多種運(yùn)行測試用例的方式,支持并行、固定順序運(yùn)行等
- 仍在活躍開發(fā)中,社區(qū)活躍,文檔豐富(1.17.0發(fā)布于2025年5月1日,對應(yīng)支持C++17)
#include <gtest/gtest.h>
#include <stdexcept>
#include "../src/Stack.hpp"
TEST(StackTest, 空堆棧的size等于0) {
Stack<std::string> stack;
EXPECT_EQ(stack.size(), 0);
}
TEST(StackTest, 放入一個(gè)對象后size加1) {
Stack<std::string> stack;
stack.push("??");
EXPECT_EQ(stack.size(), 1);
}
TEST(StackTest, pop一個(gè)對象后size減1) {
Stack<std::string> stack;
stack.push("??");
stack.pop();
EXPECT_EQ(stack.size(), 0);
}
TEST(StackTest, 空棧pop報(bào)異常) {
Stack<std::string> stack;
EXPECT_THROW(stack.pop(), std::out_of_range);
}
catch2
catch2是新興的一個(gè)C++單元測試框架,具有以下特點(diǎn):
- 更現(xiàn)代,充分利用新版C++功能特性
- 增加了BDD風(fēng)格的測試用例編寫方式,支持更自然的測試用例描述和組織方式
- 活躍開發(fā)中(3.13.0發(fā)布于2026年2月16日,對應(yīng)支持C++14)
CppUnit
CppUnit是一個(gè)老的測試框架,目前不再活躍,在一些老的項(xiàng)目中還可以見到。
2 IDE支持情況
- CMake提供了對單元測試的構(gòu)建和運(yùn)行支持
enable_testing()
add_test(NAME ${PROJECT_NAME}Test COMMAND ${PROJECT_NAME}Test)
VSCode提供有Cmake構(gòu)建工具的插件,支持識別Cmake的構(gòu)建任務(wù)、測試任務(wù)
CMake進(jìn)一步提供了對gtest的支持,可以精確識別gtest的測試用例
enable_testing()
include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME}Test)
- VSCode提供了對gtest和catch2測試用例的識別插件(C++ TestMate),可以在用例編輯界面直接標(biāo)記和運(yùn)行測試用例

識別測試用例的插件

支持識別測試用例和直接運(yùn)行