GoogleTest 使用指南 | 简介

Linux 单元测试学习过程 (1)——gtest gtest安装使用,和生成xml报告 阅读详情

GoogleTest 使用指南 | 简介

GoogleTest(也称为 gtest)是 Google 开发的一个 C++ 测试框架,用于编写和运行单元测试。它是最流行的 C++ 测试框架之一。

GoogleTest 官方网站:http://code.google.com/p/googletest/

官方的使用文档:

  1. http://code.google.com/p/googletest/wiki/GoogleTestPrimer
  2. http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide

起源和发展

创建时间:2005年由 Google 内部开发

开源时间:2008年正式开源

当前版本:v1.17.0(2025 年)

维护状态:活跃开发,定期更新

GitHub 地址:https://github.com/google/googletest

许可证:BSD-3-Clause license

主要特点

  • 跨平台:支持 Linux、macOS、Windows
  • 丰富的断言:提供多种断言宏
  • 测试发现:自动发现和运行测试
  • 测试夹具:支持测试前后的设置和清理
  • 参数化测试:用不同参数运行相同测试
  • 死亡测试:验证程序崩溃的情况
  • Mock 支持:通过 GoogleMock 支持模拟对象

为什么选择 GoogleTest?

优势:

  • 📊 行业标准:被广泛采用,包括 Google、Microsoft、IBM、NASA 等
  • 🔧 功能完整:提供单元测试所需的所有功能
  • 📚 文档完善:详细的官方文档和大量社区资源
  • 🚀 性能优秀:测试执行速度快,内存占用小
  • 🔄 持续维护:Google 持续投入资源维护和更新
  • 🎯 易于集成:支持多种构建系统(CMake、Bazel、Make等)

GoogleTest 的核心组件

项目结构

googletest/
├── googletest/          # 核心测试框架
│   ├── include/        # 公共头文件
│   │   └── gtest/
│   │       ├── gtest.h              # 主头文件
│   │       ├── gtest-death-test.h   # 死亡测试
│   │       ├── gtest-matchers.h     # 匹配器
│   │       ├── gtest-param-test.h   # 参数化测试
│   │       └── ...
│   └── src/            # 实现源码
│
└── googlemock/         # Mock 框架
    ├── include/
    │   └── gmock/
    └── src/

主要模块功能

模块功能描述主要用途
gtest核心测试框架基本的测试功能、断言、测试组织
gmock Mock对象框架创建和使用模拟对象进行测试
gtest_main主函数实现提供默认的 main() 函数
gtest-matchers高级匹配器更灵活的断言条件
gtest-parallel并行执行加速大量测试的执行

生态系统和扩展

相关工具

  • GoogleMock:模拟对象框架
  • gtest-parallel:并行测试运行器
  • gcovr:代码覆盖率工具
  • valgrind:内存检测集成
  • sanitizers:地址、线程、内存消毒器集成

社区资源

官方文档:https://google.github.io/googletest/

Google Groups:googletestframework@googlegroups.com

Google测试框架googletest简介与使用方法 断言成对出现,它们测试相同的东西,但对当前函数有不同的影响。通常首选 EXPECT_* ,因为它们允许在测试中报告一个以上的失败。但是,如果在有问题的断言失败时继 续没有意义,则应该使用 ASSERT_*。所有断言宏都支持输出流,也就是当出现错误的时候,我们可以通过流输出更详细的信息;有时候我们测试案例当中的条件太复杂,不能使用断言,那么自己写判断语句;有时候你写了某个接口,期望其他人实现它,你可能想写一系列测试,确保其他人的实现满足你的 测试;有时候相同的接口,有多个实现,下面是复用测试代码流程; 阅读详情

相关推荐

gtest 中文文档pdf

google test 中文pdf文档, 你值得拥有!

GoogleTest 官方文档

GoogleTest 是 Google 的 C++ 测试和模拟框架。

泠山的博客 1612

应广单片机 按键点灯 PMS171B GPIO LED

我也是第一次使用这款单片机,参考网友的资料,写个最近简单的demo 测试用例 #include "extern.h" /*端口定义*/ BIT KEY : PA.0; BIT SW : PA.4; /*相应于main函数*/ void FPPA0 (void) { /*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/2=8M,系统时钟为8M*/ .ADJUST_IC...

大江的专栏 1000

玩转C++单元测试之快速上手gtest

文章目录1.gtest简介2.gtest原理3.gtest安装3.1使用dnf进行安装3.2编译gtest项目源码4.gtest内置测试相关的宏5.gtest断言6.自定义测试失败信息输出7.gtest demo7.1简单用法7.2作为测试类使用7.2.1定义一个要被测试的类7.2.2定义测试类7.3执行所有测试用例8.gtest测试类的私有成员8.1加宏编译8.2 FRIEND_TEST8.3使用pimpl重构被测代码9.gtest-demo git链接 1.gtest简介 gtest是一个跨平台的(Li

不经一翻彻骨寒,怎得梅花扑鼻香 1万+

scRNA-seq | 吐血整理的单细胞入门教程(从原理到代码实操)(二)

scRNA-seq | 吐血整理的单细胞入门教程(从原理到代码实操)(二)

m0_72224305的博客 4305

【技术解析】Point-NeRF:如何通过点云优化加速神经辐射场渲染

本文深入解析了Point-NeRF技术,它通过引入3D点云作为几何先验,有效解决了传统神经辐射场渲染速度慢的痛点。该方法利用神经点云构建局部辐射场,结合点剪枝与生长策略进行动态优化,在保证高渲染质量的同时,实现了高达30倍的训练加速,为高效3D场景重建提供了新范式。

weixin_29159127的博客 267

一文学会gtest UT测试编写(TEST\TEST_F)

手把手教你学会gtest写UT测试

weixin_36389889的博客 2320

USRP B210 运行gnuradio时 FPGA固件版本冲突错误解决方法

事情起源于昨天拿到USRP后开始调试,结果整了一个下午都没解决这个问题。 昨天晚上自己思考了一下,觉得还是版本问题。 首先,uhd_find_devices和uhd_usrp_probe均可以正常运行,没有报错,固件正常加载,序列号也可看到。 teray@teray-X550JK:~$ uhd_find_devices [INFO] [UHD] linux; GNU C++ version 7.5...

斯哈研究所 4243

GoogleTest简介

GoogleTest简单介绍与使用

bdn_nbd的博客 820

微信小程序|基于小程序实现定位打卡功能

此文主要在小程序内实现打卡功能,可根据用户位置与公司设定的打卡范围实时判断打卡是否合法,并在后台对打卡记录进行管理。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

opencv案例实战——银行卡模式匹配识别

在之前的几篇文章中我们已经介绍了opencv的一些基础知识,本篇文章我们将结合一个案例运用之前的知识并且学习opencv中模式匹配的应用,用到的知识点如果有不清楚的可以查看上面列出来的系列文章。具体代码会放在最后。

艾醒的博客 1339

googletest简介

googletest是由谷歌的测试技术团队开发的测试框架,使用c++实现,具有跨平台等特性。 好的测试框架 引用谷歌给出的文档,好的测试应当具备以下特征: 测试应该是独立的和可重复的。调试一个由于其他测试而成功或失败的测试是一件痛苦的事情。googletest通过在不同的对象上运行测试来隔离测试。当测试失败时,googletest允许您单独运行它以快速调试。 测试应该很好地“组织”,并反映出测试代码的结构。googletest将相关测试分组到可以共享数据和子例程的测试套件中。这种通用模式很容易识别,并使测

m0_65931372的博客 7295

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。

JData_Engineer的博客 2302

googletest简介gtest, ut, 加过滤条件EXPECT_CALL

googletest简介_google test_唏噗的博客-优快云博客

sun007700的专栏 349

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GoogleTest---Google Mock简介--概念及基础语法

windows socket扩展函数 快速排序 enote笔记语言(1) C++数据类型和变量类型。 Google C++单元测试框架GoogleTest---GMock的CheatSheet文档 SOUI界面库 添加 windows系统文件图标皮肤 codeforces 700A As Fast As Possible 二分求和?我觉得直接解更好 c++的一个有趣的程序 2016

282

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法

就在昨天终于做了gtest的分享,我的预研工作终于结束了,感觉离我辞职的日子不远了,毕竟是专注java二百年啊,要告别实习啦。。 这篇是GoogleMock的简介文档,会在后边附带一个自己的例子。 一、什么是Google C ++ Mocking Framework? 当你写一个原型或测试,往往不能完全的依赖真实对象。一个mock对象实现与一个真实对象相同的接口,但让你在运行时指定它时...

weixin_30325487的博客 599

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

GoogleTest测试框架

Googletest测试框架是Google提供的一个c/c++代码测试框架,使用也比较简单,源码可以从github上直接下载,用法也有简单的说明,可以很快上手。 android源码中就预置了Googletest测试框架,搞android的同学可以利用这个框架来测试自己的native层代码。 想了解其实现原理的同学可以参考下面的文章,还不错: 玩转Google开源C++单元测试框架Go

专注探索c++,Linux等后台开发相关机制,欢迎关注,欢迎交流 724

googletest使用方法介绍

Google test是一种比较方便的C++测试框架, 它能够帮助我们比较方便的进行测试代码的编写, 以及输出尽可能详细的失败信息。能够大大缩短我们测试代码的编写效率, 而且该框架的使用方法也比较简单, 能够降低我们学习新框架的负担。 这篇博客写的不错,大家可以参考一下:https://blog.youkuaiyun.com/baijiwei/article/details/81265491 ...

蓝色的杯子 420

GoogleTest之test

gtest中的测试宏TEST,TEST_F, TEST_P, TYPED_TEST, TYPED_TEST_SUITE_P, TYPED_TEST_P, FRIEND_TEST, SCOPED_TRACE, GTEST_SKIP和gtes中定义的类和函数归纳总结

u010378559的博客 852

Google Test 框架

在开发过程中,如何保证代码的质量以及程序的正确性成为了我们亟需解决的问题,其中测试用例成为了不必可少的一部分。gtest 默认是不捕捉异常的,因此假如你的测试用例抛了一个异常,很可能会弹出一个对话框,这非常的不友好,同时也阻碍了测试用例的运行。gtest 框架生成详细的测试报告,显示每个测试用例的运行结果,包括通过的用例和失败的用例。用途:当待测试方法的行为取决于传入的参数时,而且这些参数的不同组合有多种, 而你又不想为此写多个类似的 test case 时,可以用参数化测试。类似模板中的编译检查。

qq_27898413的博客 209

gTest基本知识

GoogleTest 1. gTest简介 gTest是google开发团队开发的一款针对C++代码的测试框架,可以帮助我们更快,更好地写出C++测试代码。 gTest支持Linux,Windows,Mac等多个OS平台上运行 gTest不仅仅只支持单元测试,还支持其他多种类型的测试。 2. 好的测试代码具有哪些特点 测试应该是独立且可重复的 测试应该能被很好的组织且能清晰的反映测试代码的结...

tianzhiyi1989sq的博客 1893

GoogleTest单元测试框架

不想直接就写我认为的重点和难点的位置。还是从基础开始说起吧。   GoogleTest是Google开发的一套单元测试框架。能够在不同平台上(Windows,Linux,Mac OS X,Cygwin,Windows CE和Symbian)为C++编写的程序做单元测试。   它是基于xUnit架构(如JUnit)的测试框架,支持自动发现测试,丰富的断言集及XML的测试报告。   gte

dlfer11的专栏 615

C++ 测试框架 GoogleTest 初学者入门篇 甲

经常会听到开发者提起单元测试的话题,那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest.

2301_76403635的博客 166
上一篇: VSCode + CMake + GoogleTest 实现 C++ 单元测试
下一篇: GoogleTest 使用指南 | 断言
UestcXiye
博客等级 码龄8年 9029粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值