C++如何进行单元测试?GoogleTest框架在C++项目中的应用【测试教程】


GoogleTest写C++单元测试核心是三步:写TEST宏定义的测试用例、用EXPECT_EQ/ASSERT_EQ等断言验证、运行二进制并用命令行参数过滤或调试;推荐vcpkg或submodule集成,优先链接GTest::gtest_main而非手写main。

c++如何进行单元测试?googletest框架在c++项目中的应用【测试教程】

用 GoogleTest 写 C++ 单元测试,核心是三步:写测试用例、断言验证行为、运行并看结果。它不强制依赖构建系统,但和 CMake 配合最顺手。

安装与集成 GoogleTest

推荐用 git submodulevcpkg 管理依赖,避免手动编译带来的路径和 ABI 问题。

  • 用 vcpkg:执行 vcpkg install googletest:x64-windows(Windows)或 googletest:x64-linux(Linux),再在 CMake 中 find_package(GTest REQUIRED)
  • 用 submodule:把 GoogleTest 克隆进 third_party/googletest,CMake 中用 add_subdirectory(third_party/googletest),然后链接 GTest::gtest_main
  • 注意:不要直接 #include "gtest/gtest.h" 后自己实现 main(),除非你明确需要自定义初始化逻辑;多数情况直接链接 gtest_main 就自动有了入口函数

编写第一个测试用例

每个测试用例对应一个“测试套件 + 测试名”,用 TEST(TestSuiteName, TestName) 宏定义,里面写断言语句。

  • 基础断言用 ASSERT_EQ(失败立即返回)或 EXPECT_EQ(失败继续执行,适合检查多个条件)
  • 测试函数里不能有返回值,也不能传参数——所有输入数据应在测试体内构造
  • 示例:TEST(MathUtils, AddReturnsCorrectResult) { EXPECT_EQ(5, add(2, 3)); }

组织测试与复用逻辑

当多个测试需要共享初始化/清理逻辑,用测试套件类(TEST_F)比全局 setup/teardown 更安全可靠。

Notion Sites Notion Sites

Notion 推出的AI网站构建工具,允许用户将 Notion 页面直接发布为完整网站。

Notion Sites 246 查看详情 Notion Sites
  • 定义一个继承 testing::Test 的类,在 SetUp()TearDown() 中写公共资源的构造与析构
  • 成员变量自动对每个测试独立实例化,避免测试间状态污染
  • 使用时写 TEST_F(MyFixture, CanReadConfig) { EXPECT_TRUE(config_.is_valid()); }

运行与调试技巧

生成的测试可直接执行,支持命令行过滤、重复运行、输出 XML 等,开发时很实用。

  • 只跑某套件:./test_bin --gtest_filter=Network*
  • 重复跑 10 次找随机失败:./test_bin --gtest_repeat=10 --gtest_break_on_failure
  • 生成 JUnit 格式报告供 CI 解析:./test_bin --gtest_output=xml:test-report.xml
  • 在 IDE(如 CLion、VS2025)中可直接点击绿色箭头运行单个 TEST,支持断点调试

基本上就这些。GoogleTest 不复杂但容易忽略初始化方式和断言选择,写熟了就是自然反应。

以上就是C++如何进行单元测试?GoogleTest框架在C++项目中的应用【测试教程】的详细内容,更多请关注其它相关文章!


# 尼克  # 兴平关键词排名提升方案  # 荥阳seo优化哪家好  # 静安营销推广需要多少钱  # 新疆优化网站有哪些公司  # 网站排名优化金手指霸屏  # 青海营销网站推广  # seo免费课程视频运营  # 桃源关于企业网站建设  # seo技术培训东莞  # 长春seo软件打造  # 编解码  # 客户端  # 网络编程  # 三步  # linux  # 可直接  # 多个  # 套件  # 命令行  # 单元测试  # red  # google  # win  # c++  # ai  # windows  # go  # git 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Flash AS3.0简易相册制作  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  《理想汽车》权限管理设置方法  解决Go encoding/json 将JSON大数字解析为浮点数的问题  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  《饿了么》拼好饭点外卖教程2025  Sublime怎么格式化HTML代码_Sublime前端代码美化插件使用指南  如何高效地基于键列值映射DataFrame中的多个列  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  胃动力不足?试试这5个调理方法  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  什么是Satis,如何用它搭建一个私有的composer仓库?  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  composer licenses 命令:如何检查项目依赖的许可证?  解决异步Python机器人中同步操作的阻塞问题  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  批改网官网首页登录 批改网学生用户登录入口  网页版网易云音乐入口_网易云音乐在线官网登录  qq音乐官方网站入口_qq音乐在线听歌网页版链接  圆通快递官方入口不需要登录 在线查询入口快速查询  深入理解Python对象引用与链表属性赋值  excel怎么制作考勤表 excel考勤模板与函数公式讲解  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  todesk如何添加信任设备_todesk信任设备设置教程  PHP中获取HTTP响应状态消息:方法与限制  Python项目中的条件导入:解决跨模块依赖问题  HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  163邮箱在线登录 163邮箱网页版在线入口  天堂漫画网页版在线阅读 天堂漫画手机版入口  windows10怎么关闭自动安装应用_windows10禁止推广应用下载  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  《梦想世界:长风问剑录》药师一图流分享  Golang如何测试结构体方法_Golang reflect方法测试与调用技巧  《波斯王子:失落的王冠》剑术大师打法攻略  除了Copilot,还有哪些值得一试的VS Code AI插件?  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  苹果官网国补入口在哪  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享 

 2025-12-13

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.