新闻中心

c++如何进行单元测试_c++ Google Test (gtest)框架使用指南【TDD】

2025-12-06
浏览次数:
返回列表
Google Test是C++主流单元测试框架,需正确链接libgtest和libgtest_main,用TEST宏定义用例,EXPECT_与ASSERT_断言区别在于是否终止执行,支持测试夹具、参数化测试及TDD流程。

c++如何进行单元测试_c++ google test (gtest)框架使用指南【tdd】

在C++中进行单元测试,Google Test(gtest)是最主流、最成熟的选择。它轻量、跨平台、支持断言、参数化测试、死亡测试等特性,非常适合TDD(测试驱动开发)实践。

一、快速安装与项目集成

Windows下推荐用vcpkg:
vcpkg install googletest:x64-windows
Linux/macOS可源码编译或用包管理器(如apt install libgtest-dev + 编译gtest主库)。

关键点:
• 不要只链接libgtest.a,必须同时链接libgtest_main.a(含main函数)或自己写main并调用::testing::InitGoogleTest
• CMake中推荐用find_package(GTest REQUIRED) + target_link_libraries(your_test PRIVATE GTest::gtest GTest::gtest_main)

二、写第一个测试用例

每个测试用例属于一个测试套件(Test Suite),用TEST(套件名, 用例名)宏定义:

#include <gtest/gtest.h>
#include "my_math.h"  // 被测代码
<p>TEST(AddTest, PositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_NE(add(0, 0), 1);
}</p><p>TEST(AddTest, NegativeNumbers) {
ASSERT_GT(add(-1, -2), -10);  // ASSERT失败会终止当前测试函数
EXPECT_EQ(add(-1, -2), -3);
}

说明:
EXPECT_*:失败仅记录错误,继续执行后续断言
ASSERT_*:失败立即返回,适合前置条件检查
• 常用断言:EQ/NE/LT/LE/GT/GE(值比较)、TRUE/FALSEDEATH(检查崩溃)、NO_DEATH

三、组织更复杂的测试场景

测试夹具(Test Fixture):当多个测试需要共享初始化/清理逻辑时,继承::testing::Test

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派
class StackTest : public ::testing::Test {
protected:
    void SetUp() override { stack = std::stack<int>(); }
    void TearDown() override { /* 可选清理 */ }
    std::stack<int> stack;
};
<p>TEST_F(StackTest, PushAndTop) {
stack.push(42);
EXPECT_EQ(stack.top(), 42);
}

参数化测试:对同一逻辑跑多组输入:

class AddParamTest : public ::testing::TestWithParam<std::tuple<int, int, int>> {};
<p>TEST_P(AddParamTest, HandlesVariousInputs) {
auto [a, b, expected] = GetParam();
EXPECT_EQ(add(a, b), expected);
}</p><p>INSTANTIATE_TEST_SUITE_P(ValidCases, AddParamTest,
testing::Values(std::make_tuple(1, 2, 3),
std::make_tuple(-1, 1, 0),
std::make_tuple(0, 0, 0)));

四、TDD工作流建议

• 先写一个失败的测试(红)→ 实现最小可行代码让它通过(绿)→ 重构(重构)
• 测试命名体现意图,如ParseEmptyString_ReturnsNull,而非test1
• 每个测试只验证一个关注点,避免“测试过载”
• 利用--gtest_filter=AddTest.*运行子集,--gtest_break_on_failure调试时中断

基本上就这些。gtest不复杂但容易忽略初始化和链接细节,跑通第一个测试后,后续就顺了。

以上就是c++++如何进行单元测试_c++ Google Test (gtest)框架使用指南【TDD】的详细内容,更多请关注其它相关文章!


# 第三方  # 台州谷歌SEO优化  # 临沂网站建设知识  # 关键字优化网站  # 省团线上营销推广方法  # 泰安网站优化的价格  # 江门网站建设推广建设  # SEO管理员工推荐  # 网络seo 广告  # 飞鸟铃草根seo  # 关键词搜索查询排名的软件  # 工作流  # 多个  # 网络编程  # 有什么区别  # 套件  # linux  # 微软  # 第一个  # 重构  # 单元测试  # red  # cos  # 区别  # google  # win  # macos  # c++  # ai  # mac  # windows  # go 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  outlook中文官网入口地址 outlook官方中文版直达首页链接  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  曝R星经典之作开发图 设计简陋但信息密集!  解决Flask中Quill编辑器内容提交失败及TypeError的指南  css链接悬停下划线样式如何自定义_使用::after结合content和transition  PHP URL参数传递与500错误调试指南  C++ map遍历方法大全_C++ map迭代器使用总结  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  解决Python单元测试中Mock异常方法调用计数为零的问题  深入理解与实现最大堆的Heapify过程:常见错误与修正  如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  GemBox Document HTML转PDF垂直文本渲染问题及解决方案  从OpenAI API响应中高效提取生成文本  mcjs网页版在线存档 mcjs云存档登录入口  学习通网页版快速入口 学习通官网网页版直接打开  解决Bootstrap卡片顶部边距导致背景图下移的问题  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】  解决深度学习模型训练初期异常高损失与完美验证准确率问题  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  Go Martini框架:动态服务解码后的图片内容  服务端验证_j*ascript输入检查  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  AO3中文官网链接_AO3网页版稳定镜像站  excel怎么制作工资条 excel快速生成工资条的方法  AO3同人作品网入口 AO3搜索引擎官网永久地址  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  b站怎么删除评论_b站评论管理与删除操作  如何使 Jest 模拟函数默认抛出错误以提高测试效率  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版  CSS图片焦点样式实现教程:理解与应用tabindex属性  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  AO3官方在线访问地址 Archive of Our Own最新镜像合集  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  React列表渲染与独立状态管理:避免全局状态影响局部更新  DLsite中文平台入口 DLsite官网内容在线查看  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗 

搜索