新闻中心

c++怎么在CMake中添加单元测试_c++构建系统与测试集成方法

2025-11-09
浏览次数:
返回列表
首先通过FetchContent引入Google Test,再编写测试用例并创建测试可执行文件,接着用enable_testing()和add_test()注册测试,最后通过ctest运行测试。完整流程包括:1. 在CMakeLists.txt中使用FetchContent下载gtest;2. 编写被测函数及gtest测试代码;3. 配置target_link_libraries链接gtest_main和pthread;4. 调用enable_testing()并注册测试目标;5. 构建后运行ctest执行测试。关键点为正确链接库和启用测试功能。

c++怎么在cmake中添加单元测试_c++构建系统与测试集成方法

在C++项目中使用CMake集成单元测试,是提升代码质量的关键步骤。主流做法是借助Google Test(gtest)框架,并通过CMake的CTest系统管理测试用例。下面介绍如何配置。

1. 安装并引入Google Test

Google Test是C++中最常用的单元测试框架。推荐通过CMake的FetchContent自动下载并编译,避免手动安装依赖。

CMakeLists.txt中添加:

include(FetchContent)
<p>FetchContent_Declare(
googletest
URL <a href="https://www.php.cn/link/cb57ba36db3faf9723fcfeade897b7fb">https://www.php.cn/link/cb57ba36db3faf9723fcfeade897b7fb</a>
)</p><p>set(BUILD_TESTING OFF CACHE INTERNAL "禁用gtest自带的示例")
FetchContent_MakeAvailable(googletest)

2. 编写测试代码

假设你的项目有一个函数需要测试:

// math_utils.h
#pragma once
int add(int a, int b);
<p>// math_utils.cpp</p><h1>include "math_utils.h"</h1><p>int add(int a, int b) { return a + b; }

编写对应的测试文件:

// tests/test_math.cpp
#include <gtest/gtest.h>
#include "math_utils.h"
<p>TEST(MathTest, AddFunction) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_EQ(add(-1, 1), 0);
}

3. 配置CMake构建测试可执行文件

在项目根目录或tests/子目录下的CMakeLists.txt中添加测试目标:

易标AI 易标AI

告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项

易标AI 135 查看详情 易标AI
enable_testing()
<p>add_executable(test_runner tests/test_math.cpp)
target_link_libraries(test_runner gtest_main gtest pthread)</p><h1>注册到CTest</h1><p>add_test(
NAME MathTest_AddFunction
COMMAND test_runner
)

enable_testing()启用测试支持,add_test()将可执行文件注册为一个测试项。

4. 运行测试

构建项目后,使用ctest命令运行测试:

mkdir build && cd build
cmake ..
make
ctest

输出会显示测试是否通过。加上-V参数可查看详细日志:

ctest -V

也可以直接运行测试程序调试:

./test_runner

基本上就这些。只要把gtest集成好,写好测试用例,再让CMake生成并注册测试目标,就能实现自动化测试流程。不复杂但容易忽略细节,比如忘记enable_testing()或链接pthread库。确保每一步都配对,测试就能顺利跑起来。

以上就是c++++怎么在CMake中添加单元测试_c++构建系统与测试集成方法的详细内容,更多请关注其它相关文章!


# cmake  # git  # go  # github  # ai  # 单元测试  # 武汉关键词排名推荐乐云seo  # 许昌定制网站建设价格  # seo权重提升的方法  # 搜外网seo工具大全  # 增城网站优化推广方案  # 赣州食品厂网络营销推广  # 常宁百度网站优化代运营  # 电商网站 建设  # 儿童公园网站优化建议  # 淘宝商品关键词排名查询  # 解决问题  # 可以直接  # 中文网  # 相关文章  # 要把  # 内存管理  # 客户端  # 可执行文件  # 就能  # google  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Python getattr() 异常处理深度解析:避免程序意外退出  poki免费入口快捷访问 poki人气小游戏直接玩站点  将JSON对象数组转置为键值对列表的实用指南  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  从OpenAI API响应中高效提取生成文本  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  windows10怎么查看本机ip_windows10命令提示符ipconfig使用  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  163邮箱官方主页登录 直达网易邮箱登录核心页面  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  TikTok国际版官网直达_TikTok国际版官网直达进入在线观看  Go RPC HTTP服务正确实现与常见陷阱解析  Python:递归比较文件夹内容并找出特定类型文件的差异  如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  AI泡沫首次被“刺破”:GPU十年都无法存活!  如何更改在 Excel 中打开超链接时的默认浏览器  蛙漫移动版在线看 蛙漫手机浏览器直达入口  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  高德地图公交到站提醒失败如何解决 高德提醒权限设置  AO3访问入口汇总 AO3网页版同人作品一键直达  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  如何仅使用CSS更改登录界面背景图像图标的颜色  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  快速CSGO开箱网站指南 CSGO开箱平台推荐  新三国志曹操传110级星符试炼夏侯渊极难攻略  海棠账号登录入口_登录海棠账户同步阅读记录  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  Node.js中HTML按钮与J*aScript函数交互的正确姿势  Golang如何使用const iota_Go iota常量计数器讲解  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  excel如何生成目录 excel一键生成工作表目录超链接  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  理解Python模块与全局变量的作用域管理  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  Python自定义类排序:解决lambda键值访问TypeError的实践指南 

搜索