如何使用gtest为c++代码编写单元测试 Google Test框架入门【工程实践】


用Google Test写C++单元测试的核心是写可测代码、用断言验证行为、自动化执行;推荐FetchContent拉取源码编译,用TEST宏定义测试用例,EXPECT_EQ等断言验证结果。

如何使用gtest为c++代码编写单元测试 google test框架入门【工程实践】

用 Google Test(gtest)为 C++ 项目写单元测试,核心是:写可测代码 + 用断言验证行为 + 自动化执行。不需要宏大的测试架构,从一个 .cpp 文件开始就能跑起来。

一、快速搭建 gtest 环境(以 CMake 项目为例)

推荐用 FetchContent 直接拉取 gtest 源码编译,避免系统级安装或版本冲突:

  • 在项目的 CMakeLists.txt 中加入:
include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip
)
FetchContent_MakeAvailable(googletest)
<h1>链接测试可执行文件</h1><p>add_executable(my_tests test_main.cpp my_class_test.cpp)
target_link_libraries(my_tests gtest_main gtest)

注意:不用单独编译 gtest 库,FetchContent_MakeAvailable 会自动处理构建依赖;gtest_main 提供了默认的 main(),省去自己写入口函数。

二、写第一个测试用例(TestCase + TEST 宏)

假设有如下待测类:

立即学习“C++免费学习笔记(深入)”;

Magic AI Avatars Magic AI Avatars

神奇的AI头像,获得200多个由AI制作的自定义头像。

Magic AI Avatars 47 查看详情 Magic AI Avatars
// calculator.h
#pragma once
int add(int a, int b);
int multiply(int a, int b);

对应测试文件 calculator_test.cpp

#include "calculator.h"
#include <gtest/gtest.h>
&lt;p>TEST(CalculatorTest, AddPositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
}</p><p>TEST(CalculatorTest, MultiplyByZero) {
EXPECT_EQ(multiply(7, 0), 0);
EXPECT_EQ(multiply(0, -5), 0);
}
  • TEST(测试套名, 测试名) 是最常用宏,自动生成函数并注册到测试框架
  • EXPECT_EQ 是非致命断言:失败时打印信息但继续执行本测试函数
  • ASSERT_EQ

三、测试类(Test Fixture)管理共享资源

当多个测试需要共用初始化/清理逻辑(如打开文件、构造对象),用测试类更清晰:

class StringHelperTest : public ::testing::Test {
protected:
  void SetUp() override {  // 每个 TEST 运行前调用
    str_ = "hello";
  }
  void TearDown() override { } // 每个 TEST 运行后调用(可选)
<p>std::string str_;
};</p><p>TEST_F(StringHelperTest, LengthIsFive) {
EXPECT<em>EQ(str</em>.length(), 5);
}</p><p>TEST_F(StringHelperTest, StartsWithHe) {
EXPECT<em>TRUE(str</em>.starts_with("he"));
}
  • 继承 ::testing::Test,重写 SetUp/TearDown
  • TEST_F 替代 TEST,第一个参数必须是该类名
  • 每个测试运行在独立实例上,成员变量互不干扰

四、运行与调试技巧

  • 编译后直接运行可执行文件:./my_tests,默认输出简洁结果
  • 加参数查看详情:./my_tests --gtest_print_time --gtest_color=yes
  • 只运行匹配名字的测试:./my_tests --gtest_filter=*Add*./my_tests --gtest_filter=CalculatorTest.*
  • 在 IDE(如 CLion / VS Code)中配置运行目标,点击 ▶️ 即可单步调试测试函数
  • 遇到 “undefined reference to testing::InitGoogleTest”?检查是否链接了 gtest_main,且未重复定义 main()

不复杂但容易忽略:测试命名要有业务含义(比如 ParseJson_InvalidInput_ThrowsException),比 Test1 更易维护;每个 TEST 只验证一个关注点,避免堆砌多个断言掩盖真正问题。

以上就是如何使用gtest为c++++代码编写单元测试 Google Test框架入门【工程实践】的详细内容,更多请关注其它相关文章!


# 就能  # seo技术费用接单乐云seo  # 海市科技网站建设  # 重庆网站建设开发哪家好  # 石狮手机网站推广  # 自助建设外贸网站  # 邢台短视频seo  # 嘉兴seo百度优化  # 绥阳县关键词搜索排名  # 西安大型网站seo  # 企业网站优化效果  # 要有  # 不需要  # git  # 可执行文件  # 查看详情  # 第一个  # 如何使用  # 单元测试  # 多个  # 第三方  # google  # c++  # ai  # github  # go 


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


相关推荐: 《盗墓笔记手游》技能介绍  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  美发店速赢秘籍  豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】  批改网网页版登录 批改网电脑版学生登录入口  Flexbox布局:实现粘性导航与底部页脚的完美结合  抖音火山版如何进行提现  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  excel怎么计算平均值 excel平均函数*ERAGE使用教学  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  键盘保修需要什么_键盘售后维修流程  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  苹果官网国补入口在哪  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  谷歌浏览器官网地址整理_谷歌浏览器新版直连2026稳定访问  《异星探险家》古怪的物品作用介绍  Python测试中模块导入路径解析的最佳实践  作业帮网页版不用下载入口 在线问老师快速答疑  《理想汽车》权限管理设置方法  《新三国志曹操传》游历事件袁尚突围攻略  b站如何管理订阅_b站订阅标签分类管理  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  PySimpleGUI中实现键盘按键与按钮事件绑定教程  京东快递包裹信息查询入口 京东快递官方查询平台入口  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  《下一站江湖2》心法融合技巧  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  126邮箱网页在线登录2025_126邮箱网页版入口官方地址  PHP中获取HTTP响应状态消息:方法与限制  qq音乐官方网站入口_qq音乐在线听歌网页版链接  Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解  mail.qq.com登录入口 QQ邮箱网页版直达  《procreate》绘制渐变效果教程  《画加》约稿流程  使用Selenium在无头Chrome中交互动态菜单和复选框的策略  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  win11如何运行chkdsk命令 Win11检查和修复磁盘逻辑错误教程【修复】  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  《鹿路通》退余额方法  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  如何测试您的网站全球打开速度-网站海外测速工  《浙里办》电子发票开具方法  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  word文档行距怎么调?word文档调行距的操作步骤  抖音视频如何添加标题?添加标题有哪些好处?  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  原子笔记app误删找回教程 

 2025-12-17

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

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

点击免费数据支持

提交您的需求,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.