尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

[C++工程框架]gflags和gtest的简单介绍

[C++工程框架]gflags和gtest的简单介绍
📅 发布时间:2026/6/19 5:28:00

[C++工程框架]gflags和gtest的简单介绍

2025-10-13 11:21  tlnshuju  阅读(0)  评论(0)    收藏  举报

gflags和gtest的介绍和使用

  • 一 gflags介绍和使用
    • 1.gflags介绍
    • 2.gflags的使用
    • 3.使用样例
  • 二 gtest介绍和使用
    • 1.gtest介绍
    • 2.gtest的使用
    • 3.使用样例

一 gflags介绍和使用

1.gflags介绍

gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。

它具有如下几个特点:

  • 易于使用:gflags 提供了一套简单直观的 API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。
  • 自动帮助和文档:gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。
  • 类型安全:gflags 支持多种数据类型的标志,包括布尔值、整数、字符串等,并且提供了类型检查和转换。
  • 多平台支持:gflags 可以在多种操作系统上使用,包括 Windows、Linux 和 macOS。
  • 可扩展性:gflags 允许开发者自定义标志的注册和解析逻辑,提供了强大的扩展性。

简而言之gflags的作用就是:简化解析命令行参数的

2.gflags的使用

1.包含头文件

#include <gflags/gflags.h> 

2.定义参数
利用 gflag 提供的宏定义来定义参数。该宏的 3 个参数分别为命令行参数名,参数默认值,参数的帮助信息

DEFINE_string(ip, "127.0.0.1", "这是服务器的监听IP地址,格式: 127.0.0.1");
DEFINE_int32(port, 8080, "这是服务器的监听端口: 8080");
DEFINE_bool(debug_enable, true, "是否调用调试模式,格式为: true/false");

gflags 支持定义多种类型的宏函数

DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string

3.访问参数
我们在程序中进行参数的访问时,只需采用以下格式:FLAGS_name
比如上面的例子中,三个命令行参数的访问就是:FLAGS_ip,FLAGS_port,FLAGS_debug_enable

4.初始化参数

google::ParseCommandLineFlags(&argc, &argv, true);

在main函数中加入这一行即可

5.运行参数设置
gflags 为我们提供了多种命令行设置参数的方式。

string 和 int 设置参数

exec --log_file="./main.log"
exec -log_file="./main.log"
exec --log_file "./main.log"
exec -log_file "./main.log"

bool设置参数

exec --reuse_addr
exec --noreuse_addr
exec --reuse_addr=true
exec --reuse_addr=false

6.配置文件的使用
配置文件的作用是让程序运行参数的配置更标准化,无需每次运行程序时都手动输入每个参数的数值,做到“一次编写,永久使用”。需要注意的是,配置文件中的选项名称必须与代码里定义的选项名称保持一致。

-ip="192.168.113.131"
-port=1234
-debug_enable=false

3.使用样例

main.cc

#include <iostream>#include <gflags/gflags.h>using namespace std;DEFINE_string(ip, "127.0.0.1", "这是服务器的监听IP地址,格式: 127.0.0.1");DEFINE_int32(port, 8080, "这是服务器的监听端口: 8080");DEFINE_bool(debug_enable, true, "是否调用调试模式,格式为: true/false");int main(int argc, char *argv[]){google::ParseCommandLineFlags(&argc, &argv, true);cout << FLAGS_ip << endl;cout << FLAGS_port << endl;cout << FLAGS_debug_enable << endl;return 0;}

main.conf

-ip="192.168.113.131"
-port=1234
-debug_enable=false
./main --help
Flags from main.cc:
-debug_enable (是否启用调试模式,格式:true/false) type: bool
default: true
-ip (这是服务器的监听IP地址,格式:127.0.0.1) type: string
default: "127.0.0.1"
-port (这是服务器的监听端口, 格式:8080) type: int32
default: 8080
# ./main
127.0.0.1
8080
1
# ./main --flagfile main.conf
"192.168.1.1"
9090
0

二 gtest介绍和使用

只介绍在项目中我们所用到的部分

1.gtest介绍

GTest 是一个跨平台的 C++单元测试框架,由 google 公司发布。gtest 是为了在不同平台上为编写 C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件。

简单来说就是用于更方便的测试C++代码的

2.gtest的使用

1.头文件包含

#include <gtest/gtest.h> 

2.框架初始化接口

testing::InitGoogleTest(&argc, argv);

3.调用测试样例

RUN_ALL_TESTS();

4.TEST宏

//这里不需要双引号,且同测试下多个测试样例不能同名
TEST(测试名称, 测试样例名称)
TEST_F(test_fixture,test_name)
  • TEST:主要用来创建一个简单测试, 它定义了一个测试函数, 在这个函数中可以使用任何 C++代码并且使用框架提供的断言进行检查
  • TEST_F:主要用来进行多样测试,适用于多个测试场景如果需要相同的数据配置的情况, 即相同的数据测不同的行为

5.断言宏
GTest 中的断言的宏可以分为两类:

  • ASSERT_系列:如果当前点检测失败则退出当前函数
  • EXPECT_系列:如果当前点检测失败则继续往下执行

下面是经常使用的断言介绍

// bool 值检查
ASSERT_TRUE(参数),期待结果是 true
ASSERT_FALSE(参数),期待结果是 false
// 数值型数据检查
ASSERT_EQ(参数1, 参数2),传入的是需要比较的两个数  equal
ASSERT_NE(参数1, 参数2),not equal,不等于才返回 true
ASSERT_LT(参数1, 参数2),less than,小于才返回 true
ASSERT_GT(参数1, 参数2),greater than,大于才返回 true
ASSERT_LE(参数1, 参数2),less equal,小于等于才返回 true
ASSERT_GE(参数1, 参数2),greater equal,大于等于才返回 true

3.使用样例

main.cc

#include <iostream>#include <gtest/gtest.h>using namespace std;int Add(int num1, int num2){return num1 + num2;}TEST(Add_test, test1){ASSERT_EQ(Add(10, 20), 30);ASSERT_EQ(Add(20, 20), 40);}TEST(string_test, test2){string str = "hello world";EXPECT_EQ(str, "hello world");}int main(int argc, char *argv[]){testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();}
g++ -o main main.cc -std=c++17 -lgtest -pthread
[==========] Running 2 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 1 test from Add_test
[ RUN      ] Add_test.test1
[       OK ] Add_test.test1 (0 ms)
[----------] 1 test from Add_test (0 ms total)
[----------] 1 test from string_test
[ RUN      ] string_test.test2
[       OK ] string_test.test2 (0 ms)
[----------] 1 test from string_test (0 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 2 test suites ran. (0 ms total)
[  PASSED  ] 2 tests.

相关新闻

  • 2025 最新活性炭交易服务公司排行榜:实力厂商与新锐品牌权威推荐,含选购指南
  • 制造业老牌汽配企业如何借助纷享销客CRM实现数字化转型?
  • idea使用记录

最新新闻

  • 指针(4)
  • 2026年|如何高效降低论文AI检测率?三招助你轻松通过Turnitin检测
  • Transformer 发明者加入 OpenAI、创业板创历史新高、微信给 AI 发“钱包“
  • Linux Pulseaudio深度解析之pa_mainloop_get_api调用流程与实战(六十七)
  • (2026新)湘潭正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • OpenClaw装好了不知道干什么?我让它把家里的NAS、电脑和AI全串起来了

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号