新闻中心
c++如何进行单元测试_c++ Google Test (gtest)框架使用指南【TDD】
Google Test是C++主流单元测试框架,需正确链接libgtest和libgtest_main,用TEST宏定义用例,EXPECT_与ASSERT_断言区别在于是否终止执行,支持测试夹具、参数化测试及TDD流程。

在C++中进行单元测试,Google Test(gtest)是最主流、最成熟的选择。它轻量、跨平台、支持断言、参数化测试、死亡测试等特性,非常适合TDD(测试驱动开发)实践。
一、快速安装与项目集成
Windows下推荐用vcpkg:
vcpkg install googletest:x64-windows
Linux/macOS可源码编译或用包管理器(如apt install libgtest-dev + 编译gtest主库)。
关键点:
• 不要只链接libgtest.a,必须同时链接libgtest_main.a(含main函数)或自己写main并调用::testing::InitGoogleTest
• CMake中推荐用find_package(GTest REQUIRED) + target_link_libraries(your_test PRIVATE GTest::gtest GTest::gtest_main)
二、写第一个测试用例
每个测试用例属于一个测试套件(Test Suite),用TEST(套件名, 用例名)宏定义:
#include <gtest/gtest.h>
#include "my_math.h" // 被测代码
<p>TEST(AddTest, PositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_NE(add(0, 0), 1);
}</p><p>TEST(AddTest, NegativeNumbers) {
ASSERT_GT(add(-1, -2), -10); // ASSERT失败会终止当前测试函数
EXPECT_EQ(add(-1, -2), -3);
}说明:
• EXPECT_*:失败仅记录错误,继续执行后续断言
• ASSERT_*:失败立即返回,适合前置条件检查
• 常用断言:EQ/NE/LT/LE/GT/GE(值比较)、TRUE/FALSE、DEATH(检查崩溃)、NO_DEATH
三、组织更复杂的测试场景
• 测试夹具(Test Fixture):当多个测试需要共享初始化/清理逻辑时,继承::testing::Test:
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
class StackTest : public ::testing::Test {
protected:
void SetUp() override { stack = std::stack<int>(); }
void TearDown() override { /* 可选清理 */ }
std::stack<int> stack;
};
<p>TEST_F(StackTest, PushAndTop) {
stack.push(42);
EXPECT_EQ(stack.top(), 42);
}• 参数化测试:对同一逻辑跑多组输入:
class AddParamTest : public ::testing::TestWithParam<std::tuple<int, int, int>> {};
<p>TEST_P(AddParamTest, HandlesVariousInputs) {
auto [a, b, expected] = GetParam();
EXPECT_EQ(add(a, b), expected);
}</p><p>INSTANTIATE_TEST_SUITE_P(ValidCases, AddParamTest,
testing::Values(std::make_tuple(1, 2, 3),
std::make_tuple(-1, 1, 0),
std::make_tuple(0, 0, 0)));四、TDD工作流建议
• 先写一个失败的测试(红)→ 实现最小可行代码让它通过(绿)→ 重构(重构)
• 测试命名体现意图,如ParseEmptyString_ReturnsNull,而非test1
• 每个测试只验证一个关注点,避免“测试过载”
• 利用--gtest_filter=AddTest.*运行子集,--gtest_break_on_failure调试时中断

基本上就这些。gtest不复杂但容易忽略初始化和链接细节,跑通第一个测试后,后续就顺了。
以上就是c++++如何进行单元测试_c++ Google Test (gtest)框架使用指南【TDD】的详细内容,更多请关注其它相关文章!
# 第三方
# 台州谷歌SEO优化
# 临沂网站建设知识
# 关键字优化网站
# 省团线上营销推广方法
# 泰安网站优化的价格
# 江门网站建设推广建设
# SEO管理员工推荐
# 网络seo 广告
# 飞鸟铃草根seo
# 关键词搜索查询排名的软件
# 工作流
# 多个
# 网络编程
# 有什么区别
# 套件
# linux
# 微软
# 第一个
# 重构
# 单元测试
# red
# cos
# 区别
# google
# win
# macos
# c++
# ai
# mac
# windows
# go
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
outlook中文官网入口地址 outlook官方中文版直达首页链接
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
曝R星经典之作开发图 设计简陋但信息密集!
解决Flask中Quill编辑器内容提交失败及TypeError的指南
css链接悬停下划线样式如何自定义_使用::after结合content和transition
PHP URL参数传递与500错误调试指南
C++ map遍历方法大全_C++ map迭代器使用总结
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
解决Python单元测试中Mock异常方法调用计数为零的问题
深入理解与实现最大堆的Heapify过程:常见错误与修正
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
从OpenAI API响应中高效提取生成文本
mcjs网页版在线存档 mcjs云存档登录入口
学习通网页版快速入口 学习通官网网页版直接打开
解决Bootstrap卡片顶部边距导致背景图下移的问题
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
解决深度学习模型训练初期异常高损失与完美验证准确率问题
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
Go Martini框架:动态服务解码后的图片内容
服务端验证_j*ascript输入检查
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
AO3中文官网链接_AO3网页版稳定镜像站
excel怎么制作工资条 excel快速生成工资条的方法
AO3同人作品网入口 AO3搜索引擎官网永久地址
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
b站怎么删除评论_b站评论管理与删除操作
如何使 Jest 模拟函数默认抛出错误以提高测试效率
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
CSS图片焦点样式实现教程:理解与应用tabindex属性
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
AO3官方在线访问地址 Archive of Our Own最新镜像合集
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
React列表渲染与独立状态管理:避免全局状态影响局部更新
DLsite中文平台入口 DLsite官网内容在线查看
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗


2025-12-06
浏览次数:次
返回列表