C++如何使用gtest进行单元测试_C++单元测试框架与gtest使用指南


c++kquote>首先安装配置gtest,可通过包管理器或源码编译;接着编写测试用例,使用TEST宏定义测试套件与用例,结合EXPECT_EQ等断言验证函数行为;然后编译时链接gtest库并运行可执行文件查看结果;最后利用常用断言和参数化测试提升测试覆盖率,推荐集成CMake实现自动化测试,确保代码质量。

c++如何使用gtest进行单元测试_c++单元测试框架与gtest使用指南

在C++开发中,单元测试是保障代码质量的重要手段。Google Test(简称gtest)是目前最流行的C++单元测试框架之一,提供了简洁的断言、测试用例组织和丰富的运行选项。下面介绍如何在项目中集成并使用gtest进行单元测试。

1. 安装与配置gtest

要使用gtest,首先需要获取并安装它。常见方式有通过包管理器或源码编译。

Ubuntu/Debian系统:

sudo apt-get install libgtest-dev cmake

注意:libgtest-dev只包含源码,需自行编译生成库文件。

手动编译安装:

  • 从GitHub克隆gtest源码:git clone https://github.com/google/googletest.git
  • 进入目录并使用cmake构建:
    cd googletest
    mkdir build && cd build
    cmake ..
    make && sudo make install

默认会将头文件安装到/usr/local/include,库文件到/usr/local/lib

2. 编写第一个测试用例

假设有一个简单的加法函数需要测试:

// math.h
#ifndef MATH_H
#define MATH_H
int add(int a, int b);
#endif

// math.cpp
#include "math.h"
int add(int a, int b) {
  return a + b;
}

编写对应的测试文件:

// test_math.cpp
#include
#include "math.h"
// 测试用例:测试add函数
TEST(MathTest, AddPositiveNumbers) {
  EXPECT_EQ(add(2, 3), 5);
  EXPECT_EQ(add(0, 0), 0);
}
TEST(MathTest, AddNegativeNumbers) {
  EXPECT_EQ(add(-1, -1), -2);
}

这里使用了TEST宏定义测试用例,格式为TEST(测试套件名, 测试名)。EXPECT_EQ用于判断两个值是否相等,若不满足不会立即退出测试。

Medeo Medeo

AI视频生成工具

Medeo 283 查看详情 Medeo

3. 编译并运行测试

将测试文件与gtest链接编译:

g++ -std=c++11 test_math.cpp math.cpp -lgtest -lgtest_main -lpthread -o test_math

运行可执行文件:

./test_math

输出类似:

[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from MathTest
[ RUN ] MathTest.AddPositiveNumbers
[ OK ] MathTest.AddPositiveNumbers (0 ms)
[ RUN ] MathTest.AddNegativeNumbers
[ OK ] MathTest.AddNegativeNumbers (0 ms)
[----------] 2 tests from MathTest (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (0 ms total)
[ PASSED ] 2 tests.

4. 常用断言与高级特性

gtest提供多种断言宏,分为两类:

  • EXPECT_*:断言失败时打印信息,继续执行后续语句
  • ASSERT_*:断言失败时立即终止当前测试函数

常用断言示例:

EXPECT_EQ(a, b); // a == b
EXPECT_NE(a, b); // a != b
EXPECT_LT(a, b); // a EXPECT_LE(a, b); // a EXPECT_GT(a, b); // a > b
EXPECT_GE(a, b); // a >= b
EXPECT_TRUE(condition);
EXPECT_FALSE(condition);
EXPECT_STREQ(s1, s2); // 字符串相等

对于浮点数比较,推荐使用:

EXPECT_FLOAT_EQ(a, b); // 单精度近似相等
EXPECT_DOUBLE_EQ(a, b); // 双精度

还可以使用参数化测试来对同一函数进行多组数据验证:

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

基本上就这些。掌握gtest的基本使用后,可以将其集成进CMake构建系统,实现自动化测试。关键是写出清晰、独立、可重复的测试用例,提升代码健壮性。

以上就是C++如何使用gtest进行单元测试_C++单元测试框架与gtest使用指南的详细内容,更多请关注其它相关文章!


# 提高效率  # 月嫂行业网站推广方案  # 网站建设合同电子版  # 武汉哪里建设网站  # 百度搜索关键词排名 s  # 荆州seo公司甄选火星  # 专业网站建设平台咨询  # 拼多多关键词排名查询软件  # 政府网站建设哪家信誉好  # 如何提升精准关键词排名  # 贵阳网站网络推广  # 推荐使用  # 第一个  # 还可以  # git  # 可执行文件  # 套件  # 第三方  # 管理器  # 如何使用  # 单元测试  # c++开发  # google  # c++  # ai  # ubuntu  # github  # go 


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


相关推荐: 《海豚家》注销账号方法  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  智慧职教mooc平台登录网址 智慧职教mooc官网直达  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  win11如何诊断DirectX问题 Win11运行dxdiag工具排查显卡故障【排错】  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  苹果官网国补入口在哪  如何高效地基于键列值映射DataFrame中的多个列  Eclipse开发J*a快速入门  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  《火花chat》搜索好友方法  iphone16系列配置参数介绍  《密马》发布账号方法  《图怪兽》退出登录方法  QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航  解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  Highcharts雷达图径向轴数值标签实现教程  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  汽车之家网页版免费登录_汽车之家官网首页直接进入  J*aScript 数值去小数位处理:多种方法与实践  C++如何实现单例模式_C++线程安全的单例模式写法  泰拉瑞亚水晶无法放置问题  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  掌握产品代码正则表达式:避免常见陷阱与精确匹配  Animex动漫社社登录官网 Animex动漫社资源社入口直达  2025SNH48年度青春盛典门票价格及购买方式  《真我》申请退款方法  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  使用document.execCommand实现Web文本编辑器加粗/取消加粗  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  Python实战:高效处理实时数据流中的最小/最大值  快递物流路径揭秘  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  学习通网页版个人登录_学习通网页版个人账户登录入口  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  Django模型动态关联检查:高效管理复杂关系  Go语言中方法与接收器:指针和值类型的调用机制详解  鸣潮历史学家灯塔位置一览  拷贝漫画2025网页版入口 拷贝漫画官网免费看全集  六级准考证号怎么查_四六级准考证查询入口官网  京东快递包裹信息查询入口 京东快递官方查询平台入口  《一起考教师》账号注销方法  AI图层蒙版怎么用_AI图层蒙版应用技巧与设计实例  12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化  《友玩*》创建群聊方法  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  在Flask应用中安全高效地更新SQLAlchemy用户数据  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  批改网官网首页登录 批改网学生用户登录入口 

 2025-12-05

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

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

点击免费数据支持

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