新闻中心
C++怎么使用Google Test编写单元测试_C++项目自动化测试框架GTest入门
GTest是C++中流行的单元测试框架,由Google开发,支持跨平台。可通过vcpkg或CMake FetchContent集成。编写测试使用TEST宏定义用例,EXPECT_EQ等断言验证结果。配合CMake配置enable_testing、add_test等指令构建测试套件,支持命令行过滤与重复执行。推荐结合CTest运行,适用于从小型到大型项目的测试组织与管理。

Google Test(简称 GTest)是 C++ 中最流行的单元测试框架之一,由 Google 开发并开源,支持跨平台使用。它能帮助开发者编写和运行 C++ 的自动化测试用例,验证函数、类和模块的正确性。下面介绍如何在 C++ 项目中集成并使用 GTest 编写基本的单元测试。
1. 安装与配置 GTest
有多种方式引入 GTest 到你的项目中,常用方法包括通过包管理器安装或使用 CMake 拉取源码编译。
方法一:使用 vcpkg(推荐)
如果你使用 vcpkg 管理依赖:
vcpkg install gtest- CMake 会自动找到 GTest,无需手动配置路径
方法二:使用 CMake FetchContent(适合小型项目)
在项目的 CMakeLists.txt 中添加:
include(FetchContent) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip ) FetchContent_MakeAvailable(googletest)
这样会自动下载并编译 GTest,无需系统级安装。
2. 编写第一个测试用例
假设你有一个简单的加法函数:
// math.h #pragma once int add(int a, int b);
// math.cpp
#include "math.h"
int add(int a, int b) {
return a + b;
}现在为它写一个测试文件:
// test_math.cpp
#include <gtest/gtest.h>
#include "math.h"
<p>TEST(MathTest, AddPositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
}</p><p>TEST(MathTest, AddNegativeNumbers) {
EXPECT_EQ(add(-1, -1), -2);
}</p><p>TEST(MathTest, AddMixedNumbers) {
EXPECT_EQ(add(-1, 1), 0);
}说明:
-
TEST(测试套件名, 测试用例名)定义一个测试用例 -
EXPECT_EQ验证两个值是否相等,不相等也不会立即终止测试 - 若希望出错即停止,可使用
ASSERT_EQ
3. 配置 CMake 构建测试
在项目根目录的 CMakeLists.txt 中添加:
N世界
一分钟搭建会展元宇宙
138
查看详情
cmake_minimum_required(VERSION 3.14) project(my_project) <h1>添加源文件</h1><p>add_library(math math.cpp)</p><h1>启用测试</h1><p>enable_testing()</p><h1>添加测试可执行文件</h1><p>add_executable(test_math test_math.cpp) target_link_libraries(test_math gtest_main math)</p><h1>注册测试到 CTest</h1><p>add_test(NAME MathTestSuite COMMAND test_math)
然后构建并运行:
mkdir build && cd build cmake .. && make ./test_math # 直接运行测试 ctest # 使用 CTest 运行(推荐)
4. 常用断言宏
GTest 提供丰富的断言方式:
-
EXPECT_EQ(a, b):a == b -
EXPECT_NE(a, b):a != b -
EXPECT_LT(a, b):a -
EXPECT_GT(a, b):a > b -
EXPECT_TRUE(condition):条件为真 -
EXPECT_FALSE(condition):条件为假 -
EXPECT_DOUBLE_EQ(a, b):浮点数近似相等 -
EXPECT_STREQ(s1, s2):字符串相等
失败时会输出具体值和位置,便于调试。
5. 组织多个测试文件
大型项目可以拆分多个测试文件,例如:
test_math.cpptest_string_utils.cpptest_container.cpp
每个文件生成一个可执行文件或统一链接到一个测试主程序中。也可以使用 gtest_main 提供默认 main 函数,省去手写入口。
6. 运行选项与过滤
运行测试时可通过命令行参数控制行为:
-
--gtest_list_te:列出所有测试用例
sts -
--gtest_filter=MathTest.*:只运行 MathTest 套件下的测试 -
--gtest_repeat=5:重复执行 5 次 -
--gtest_break_on_failure:失败时中断(用于调试)
例如:
./test_math --gtest_filter=MathTest.AddPositive*
基本上就这些。掌握这些内容后,你就可以在 C++ 项目中使用 GTest 实现基础的单元测试了。随着项目变大,还可以引入参数化测试、死亡测试等功能,进一步提升测试覆盖率。
以上就是C++怎么使用Google Test编写单元测试_C++项目自动化测试框架GTest入门的详细内容,更多请关注其它相关文章!
# 可执行文件
# 南平搜狗问答推广营销
# 有利于seo的网站源码
# 出境游同业营销推广技巧
# seo技术培训广告
# 成都兴隆推广营销广告
# 济南商品推广网站优化
# 推广网站哪个空间好
# seo免费留痕外推
# 百度关键词排名变动
# 东莞软文网络营销推广
# 第一个
# 还可以
# 如果你
# git
# 可通过
# 多个
# 套件
# 命令行
# 第三方
# 单元测试
# red
# google
# c++
# ai
# ppt
# github
# go
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
Pandas DataFrame 多条件优先级排序与排名
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题
铃兰之剑为这和平的世界希里技能组及加点推荐
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
顺丰国际快递查询 国际件官方查询入口
微信网页版官方入口教程 微信网页版网页版快速登录步骤
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
网易大神账号申诉需要多久_网易大神账号申诉流程说明
2025-2030年全球乘用车销量预测:新能源成增长主力
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
如何在Promise链中有效终止错误处理后的执行
Lar*el Excel导入时生成自定义递增ID的策略与实践
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
使用Python高效删除Word宏并转换DOCM为DOCX格式
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置
c++项目目录结构应该如何组织_c++工程化项目结构规范
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
新手怎么开始学化妆 零基础化妆入门教程
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
React/Next.js中实现列表项的动态选择与移动
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
Python字典中优雅地迭代剩余元素的方法
使用J*aScript检测输入元素是否包含在特定类中
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
Python getattr() 异常处理深度解析:避免程序意外退出
Python异步编程实践:使用Binance API构建实时交易数据流
C++ vector二维数组定义_C++ vector of vector用法
小米汽车11月交付量突破40000台!雷军:将继续努力
C++如何比较两个字符串_C++ string compare函数与操作符对比
免费抖音短视频入口_抖音网页版短视频免费通道
AngularJS $http POST请求数据传递与Go后端接收实践
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
yy漫画网页版官方入口_yy漫画官网登录页面链接
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
在Go Martini框架中高效服务动态生成图像的实践指南
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
R星幕后开发视频泄露 包含《GTA6》等多款大作
J*aScriptWebpack优化_J*aScript构建工具实战
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略


2025-11-28
浏览次数:次
返回列表
sts