全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

在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用于判断两个值是否相等,若不满足不会立即退出测试。

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构建系统,实现自动化测试。关键是写出清晰、独立、可重复的测试用例,提升代码健壮性。


# git  # go  # github  # ubuntu  # ai  # c++  # google  # c++开发  # define  # include  # math  # auto  # 字符串  # int  # class  # public  # default  # https  # debian  # 自动化  # 单元测试  # 管理器  # 套件  # 可执行文件  # 还可以  # 第一个  # 推荐使用  # 将其  # 可通过  # 会将 


相关文章: 建站之星代理商如何保障技术支持与售后服务?  建站上传速度慢?如何优化加速网站加载效率?  如何通过远程VPS快速搭建个人网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  香港服务器选型指南:免备案配置与高效建站方案解析  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  制作网站的公司有哪些,做一个公司网站要多少钱?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何生成腾讯云建站专用兑换码?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  ,想在网上投简历,哪几个网站比较好?  如何选择服务器才能高效搭建专属网站?  如何快速搭建安全的FTP站点?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何挑选优质建站一级代理提升网站排名?  Bpmn 2.0的XML文件怎么画流程图  如何自定义建站之星网站的导航菜单样式?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何在橙子建站上传落地页?操作指南详解  深入理解Android中的xmlns:tools属性  如何通过云梦建站系统实现SEO快速优化?  高防服务器租用首荐平台,企业级优惠套餐快速部署  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  建站主机默认首页配置指南:核心功能与访问路径优化  如何获取开源自助建站系统免费下载链接?  建站之家VIP精选网站模板与SEO优化教程整合指南  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  常州企业网站制作公司,全国继续教育网怎么登录?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  内网网站制作软件,内网的网站如何发布到外网?  建站ABC备案流程中有哪些关键注意事项?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机如何选?高性价比方案全解析  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何选择建站程序?包含哪些必备功能与类型?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何选择美橙互联多站合一建站方案?  免费视频制作网站,更新又快又好的免费电影网站?  宝塔Windows建站如何避免显示默认IIS页面?  宝塔建站助手安装配置与建站模板使用全流程解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。