CPP單元測試工具情況

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支持情況

  1. CMake提供了對單元測試的構(gòu)建和運(yùn)行支持
enable_testing()
add_test(NAME ${PROJECT_NAME}Test COMMAND ${PROJECT_NAME}Test)
  1. VSCode提供有Cmake構(gòu)建工具的插件,支持識別Cmake的構(gòu)建任務(wù)、測試任務(wù)

  2. CMake進(jìn)一步提供了對gtest的支持,可以精確識別gtest的測試用例

enable_testing()
include(GoogleTest)
gtest_discover_tests(${PROJECT_NAME}Test)
  1. VSCode提供了對gtest和catch2測試用例的識別插件(C++ TestMate),可以在用例編輯界面直接標(biāo)記和運(yùn)行測試用例
識別測試用例的插件
支持識別測試用例和直接運(yùn)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容