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

news/2025/10/13 11:24:46/文章来源:https://www.cnblogs.com/tlnshuju/p/19138054

[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的作用就是:简化解析命令行参数的

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年水下打捞/打捞手机/打捞黄金/打捞戒指公司推荐榜:聚焦专业与高效,助您精准匹配靠谱服务

随着水上作业场景多元化、个人水下财物保护需求提升及航运事业的蓬勃发展,水下打捞服务已从专业工程领域逐步延伸至民用应急场景,2025 年国内水下打捞市场规模预计持续扩容。但市场快速发展也催生了资质不全、技术薄…

2025年10月通风气楼厂家最新推荐排行榜,工业/商用通风气楼,高效节能通风解决方案提供商!

2025年10月通风气楼厂家最新推荐排行榜,工业/商用通风气楼,高效节能通风解决方案提供商!随着工业和商业建筑对空气质量要求的不断提高,通风气楼作为重要的通风设备,其市场需求也在不断增长。为了帮助筛选通风气楼…

算法练习记录

1、输入两个字符串数据,返回加法运算后的值?public static String addStrings(String num1, String num2) {StringBuilder res = new StringBuilder();int i = num1.length() - 1;int j = num2.length() - 1;int car…

2025 最新活性炭交易服务公司排行榜:实力厂商与新锐品牌权威推荐,含选购指南

当前活性炭行业市场规模持续扩张,应用已渗透自来水处理、食品加工、工业废气净化等数十个领域,但行业内厂商资质悬殊:部分企业原料劣质、工艺落后导致产品吸附性能不达标,部分缺乏专业团队难以提供适配方案,回收环…

【隐语SecretFlow】 Unbalanced PSI Benchmark性能测试报告

导语 2022年10月份,隐语发布了PSI的性能数据,当时就引起了内部和外部用户的广泛关注,具体协议包括:ecdh/kkrt16/bc22协议,这些协议更适合双方数据量差别不大的场景,称为平衡PSI(Balanced PSI)。 在现实的隐私求…

制造业老牌汽配企业如何借助纷享销客CRM实现数字化转型?

作为汽车零部件行业的老牌企业,精成车业近年来积极推进数字化转型,以实现业务流程规范化、数据一体化和管理高效化。通过引入纷享销客 CRM,精成车业在数据驱动决策、运营效率提升等方面取得了显著成效。“ 通过 CRM…

idea使用记录

1、idea设置class文件输出路径 idea设置class文件输出路径

牛客刷题-Day12

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day12 今日刷题:\(1056-1061\) 1057 [NOIP2001]统计单词个数 题目描述 给出一个长度不超过 \(200\) 的由小写…

国产代码托管平台Gitee构建企业级安全防线 助力信创产业自主可控

国产代码托管平台Gitee构建企业级安全防线 助力信创产业自主可控 在数字经济加速发展的当下,代码资产已成为企业核心竞争力的重要组成部分。作为国内领先的代码托管平台,Gitee通过构建"预防-控制-追溯"三位…

2025年10月拉伸器批发厂家最新推荐排行榜,液压拉伸器,机械拉伸器,电动拉伸器公司推荐!

2025年10月拉伸器批发厂家最新推荐排行榜,液压拉伸器,机械拉伸器,电动拉伸器公司推荐!随着工业技术的不断进步,拉伸器在各个领域的应用越来越广泛。无论是液压拉伸器、机械拉伸器还是电动拉伸器,选择合适的品牌和…

Gitee崛起:中国开发者生态的新基建如何重塑技术格局

Gitee崛起:中国开发者生态的"新基建"如何重塑技术格局 在全球数字化转型浪潮中,中国开发者正迎来前所未有的机遇与挑战。作为本土领先的代码托管平台,Gitee凭借其独特的本土化优势和创新功能,正在重新定…

工业状态控制

namespace 工业状态机 {public partial class MainForm : Form{private StateMachine stateMachine; public MainForm(){InitializeComponent();}private void MainForm_Load(object sender, EventArgs e){stateMachin…

2025 年磨粉机厂家最新推荐榜单:全面覆盖新型磨粉机、超细磨粉机、立式双动力磨粉机及节能磨粉机,为各行业采购者精准筛选优质品牌

当前磨粉机市场品牌繁杂,产品性能、质量差异显著,矿山、建材、化工等行业采购者在挑选设备时,常面临不知如何辨别优劣的难题。部分产品宣传与实际不符,易导致采购失误,不仅增加成本,还可能影响生产进度。为解决这…

Qwen2.5技术报告

全文摘要Qwen2.5系列模型经过预训练和后处理两个阶段的改进,在高质量预训练数据集的基础上,通过多阶段强化学习等技术进行后处理,提高了人类偏好、长文本生成、结构数据分析和指令遵循等方面的能力。该系列模型提供…

手把手教你在 Windows 安装 Docker Desktop

本文是一份零基础友好、步骤化的实操教程,旨在帮助初学者和高级开发者快速掌握在 Windows 系统中基于 WSL 2(适用于 Linux 的 Windows 子系统,版本 2)安装 Docker Desktop 的方法,并学会使用 VS Code 在远程容器中…

强化学习的数学原理-04章 策略评估与策略优化 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

HDU1204糖果大战 题解

HDU1204糖果大战 题解HDU1204 的题解。这篇题解写的很不错,但是一些小细节我还是太看不懂了,所以补充一下。 【首先得注意到是胜者从败者中拿走一颗糖。】 首先 simple 地设 \(f_i\) 表示当 S 有 \(i\) 颗糖的时候获…

吴恩达深度学习笔记----系列文章

吴恩达深度学习笔记----系列文章随笔分类 - 吴恩达深度学习笔记吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(五)吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础(四)吴恩达深…

AI重构项目管理:2025年工具生态的三大颠覆性趋势

AI重构项目管理:2025年工具生态的三大颠覆性趋势 当微软Project 2025预览版首次演示AI自动调整2000人天项目计划时,全球CTO们意识到项目管理工具的进化已进入新纪元。据Gartner最新产业图谱显示,AI驱动的智能项目管…

跨数据与任务的可扩展图像分割技术

本文介绍了一种新型混合查询变换器架构,通过融合可学习查询和条件查询来提升图像分割模型的跨任务迁移能力。该方法利用合成数据解决标注数据稀缺问题,在多个数据集上的实验表明,同时扩展训练数据量和任务多样性可显…