GTest使用手册

合集下载

gtest使用手册

gtest使用手册

gtest 使用手册gtest 是一个流行的 C++单元测试框架,它提供了丰富的功能和简洁的 API,使得编写和运行单元测试变得更加容易和高效。

本文将介绍 gtest 的基本概念和使用方法,帮助读者快速上手并熟练使用 gtest 进行单元测试。

下面是本店铺为大家精心编写的3篇《gtest 使用手册》,供大家借鉴与参考,希望对大家有所帮助。

《gtest 使用手册》篇1一、什么是 gtest?gtest 是一个由 Google 开发的 C++单元测试框架,旨在为开发者提供一种简单、高效的方式来编写和运行单元测试。

gtest 提供了丰富的功能和简洁的 API,可以与各种编译器和 IDE 集成,并支持多种测试类型和断言风格。

二、gtest 的基本概念1. 测试套件(Test Suite):测试套件是 gtest 的基本单位,它包含一个或多个测试用例(Test Case)。

每个测试套件都有一个入口函数,该函数负责初始化和清理测试环境。

2. 测试用例(Test Case):测试用例是测试套件中的基本测试单元,它包含一个或多个测试步骤,每个测试步骤都包含一个预期结果和一个实际结果。

3. 断言(Assertion):断言是 gtest 中用于验证测试结果的一种机制,它用于比较预期结果和实际结果是否相等。

gtest 提供了多种断言类型,包括 EXPECT_EQ、EXPECT_NE、EXPECT_TRUE、EXPECT_FALSE 等。

4. 测试助手(Test Helper):测试助手是一种特殊的测试用例,它用于为其他测试用例提供共性的测试步骤和断言。

三、gtest 的使用方法1. 安装 gtest:在使用 gtest 之前,需要先安装 gtest。

可以使用 CMake 或 Maven 等构建工具来安装 gtest。

2. 编写测试用例:编写测试用例时,需要继承testing::TestWithParam 类,并实现 TestBody 函数。

gtest用例 -回复

gtest用例 -回复

gtest用例-回复什么是gtest?GTest是一个C++的测试框架,它用于编写单元测试。

GTest是Google的一个开源项目,它提供了一组丰富的API来编写测试用例。

GTest具有简单易用的语法和强大的功能,被广泛应用于C++软件开发中的单元测试环节。

GTest的安装和设置首先,我们需要下载并构建GTest的测试框架。

在Linux和Mac系统上,可以通过源码编译来安装GTest。

首先,从GTest的官方GitHub 页面下载最新版本的源代码压缩包,并解压到本地目录。

然后,打开终端,并进入解压得到的文件夹。

在命令行中运行以下命令:cd googletest-mastermkdir buildcd buildcmake ..make这将会在当前目录下生成一个可执行文件夹。

现在,我们需要将GTest 的头文件和库文件链接到我们的项目中。

将生成的libgtest.a和libgtest_main.a文件复制到一个全局位置,使得它们可以被其他项目引用。

我们还需要将gtest文件夹中的include文件夹复制到/usr/local/include 路径下。

GTest的基本概念在使用GTest编写测试用例之前,我们需要了解一些基本概念。

首先是测试夹具(Test Fixture),它是用于对一组测试用例进行初始化和清理操作的对象。

测试夹具可以派生自testing::Test类。

其次是测试用例(Test Case),一个测试用例通常包括测试夹具的设置、测试函数的调用以及对测试函数的断言。

最后是断言(Assertion),用于判断测试结果与预期结果是否相等。

GTest的用法示例让我们以一个简单的示例来说明GTest的用法。

假设我们要编写一个函数,用于判断一个给定的整数是否为质数。

我们可以创建一个名为PrimeNumber的测试夹具,并在其中定义一个名为IsPrime的静态函数。

然后,我们可以在测试用例中对这个函数进行测试。

GTest使用手册

GTest使用手册

玩转Google开源C++单元测试框架GoogleTest系列(gtest)(总)前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。

我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。

其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们的测试框架,但最后我们还是决定使用gtest取代掉原来的自己的测试框架,原因是:1.不断完善我们的测试框架之后就会发觉相当于把gtest重新做了一遍,虽然轮子造的很爽,但是不是必要的。

2.使用gtest可以免去维护测试框架的麻烦,让我们有更多精力投入到案例设计上。

3.gtest提高了非常完善的功能,并且简单易用,极大的提高了编写测试案例的效率。

如果想对gtest官方已经有如此完备的文档了,为什么我还要写呢?一方面是自己记记笔记,好记性不如烂笔头,以后自己想查查一些用法也可以直接在这里查到,一方面是对于不想去看一大堆英文文档的朋友,在我这里可以快速的找到gtest相关的内容。

一、初识gtest1、前言本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。

2、下载如果不记得网址,直接在google里搜gtest,第一个就是。

目前gtest的最新版本为1.3.0 3、编译下载解压后,里面有个msvc目录:使用VS的同学可以直接打开msvc里面的工程文件,如果你在使用的是VS2005或是VS2008,打开后会提示你升级,升完级后,我们直接编译里面的“gtest”工程,可以直接编过的。

这里要提醒一下的是,如果你升级为VS2008的工程,那么你的测试Demo最好也是VS2008工程,不然你会发现很郁闷,你的Demo怎么也编不过,我也曾折腾了好久,当时我升级为了VS2008工程,结果我使用VS2005工程建Demo,死活编不过。

googletest测试框架使用教程

googletest测试框架使用教程
通常在测试过程中需要考虑各种各样的输入有的输入可能直接导致程序崩溃这时就需要检查程序是否按照预期的方式挂掉这也就是所谓的死亡测试
目录
1 在 VS2008 中使用 GOOGLETEST ..........................................................................................................2
2.3 参数化 ............................................................................................................................................ 14 2.3.1 值参数化 ................................................................................................................................... 14 2.3.2 类型参数化 ............................................................................................................................... 17
1.2.1 目录说明 ..................................................................................................................................... 2 1.2.2 编译 ............................................................................................................................................. 3 1.2.3 注意 ............................................................................................................................................. 3 1.3 第一个 DEMO .................................................................................................................................... 4 1.3.1 第一步:创建工程 ..................................................................................................................... 4 1.3.2 第二步:配置项目属性 ............................................................................................................. 5 1.3.3 第三步:编写单元测试案例 ..................................................................................................... 6

gTestsMulti软件文档说明书

gTestsMulti软件文档说明书

Package‘gTestsMulti’August22,2023Type PackageTitle New Graph-Based Multi-Sample TestsVersion0.1.1Suggests ade4Description New multi-sample tests for testing whether multiple samples are from the same distribu-tion.They work well particularly for high-dimensional data.Song,H.and Chen,H.(2022)<arXiv:2205.13787>.Author Hoseung Song[aut,cre],Hao Chen[aut]Maintainer Hoseung Song<******************>License GPL(>=2)Imports Matrix,MASSEncoding UTF-8NeedsCompilation noRepository CRANDate/Publication2023-08-2220:40:07UTCR topics documented:gTestsMulti (2)gtestsmulti (3)Index512gTestsMulti gTestsMulti New graph-based multi-sample testsDescriptionThis package can be used to determine whether multiple samples are from the same distribution.Author(s)Hoseung Song and Hao ChenMaintainer:Hoseung Song(******************)ReferencesSong,H.and Chen,H.(2022).New graph-based multi-sample tests for high-dimensional and non-Euclidean data.arXiv:2205.13787See AlsogtestsmultiExamples##Mean difference in Gaussian distribution.d=50mu=0.2sam=50set.seed(500)X1=matrix(rnorm(d*sam),sam)X2=matrix(rnorm(d*sam,mu),sam)X3=matrix(rnorm(d*sam,2*mu),sam)data_list=list(X1,X2,X3)#We use mstree in ade4 package to construct the minimum spanning tree.require(ade4)x=rbind(X1,X2,X3)E=mstree(dist(x))a=gtestsmulti(E,data_list,perm=1000)#output results based on the permutation and the asymptotic results#the test statistic values can be found in a$teststat#p-values can be found in a$pvalgtestsmulti New graph-based multi-sample testsDescriptionThis function provides graph-based multi-sample tests.Usagegtestsmulti(E,data_list,perm=0)ArgumentsE The edge matrix for the similarity graph.Each row contains the node indices ofan edge.data_list The list of multivariate matrices corresponding to the K different classes.The length of the list is K.Each element of the list is a matrix containing observationsas the rows and features as the columns.perm The number of permutations performed to calculate the p-value of the test.The default value is0,which means the permutation is not performed and only ap-proximated p-value based on the asymptotic theory is provided.Doing permu-tation could be time consuming,so be cautious if you want to set this value tobe larger than10,000.ValueReturns a list teststat with each test statistic value and a list pval with p-values of the tests.See below for more details.S The value of the test statistic S.S_A The value of the test statistic S A.S_appr The approximated p-value of S based on asymptotic theory with a Bonferroni procedure.S_A_appr The approximated p-value of S A based on asymptotic theory.S_perm The permutation p-value of S when argument‘perm’is positive.S_A_perm The permutation p-value of S A when argument‘perm’is positive.See AlsogTestsMulti-packageExamples##Mean difference in Gaussian distribution.d=50mu=0.2sam=50set.seed(500)X1=matrix(rnorm(d*sam),sam)X2=matrix(rnorm(d*sam,mu),sam)X3=matrix(rnorm(d*sam,2*mu),sam)data_list=list(X1,X2,X3)#We use mstree in ade4 package to construct the minimum spanning tree.require(ade4)x=rbind(X1,X2,X3)E=mstree(dist(x))a=gtestsmulti(E,data_list,perm=1000)#output results based on the permutation and the asymptotic results#the test statistic values can be found in a$teststat#p-values can be found in a$pvalIndexgTestsMulti,2gtestsmulti,2,3gTestsMulti-package(gTestsMulti),25。

gtest使用

gtest使用

1.在vs中创建新项目
2.选择空项目
3
4.上面三步是在VS创建项目和文件5.以下是做VS和GTEST集成设置6.引用GTEST的头文件
7
8引用GTEST的库文件
8,自动测试的核心是断言,gtest提供的最基本断言:比较数值:
EXPECT_EQ(预期的值,实际值):比较相等的
EXPECT_LT(var1,var2):比较大小的 var1 < var2 EXPECT_TRUE(condition); 是判断条件为真。

EXPECT_STREQ()比较字符串内容
布尔断言:
Assert断言和expect断言的区别在于
Assert断言碰到错误会从当前函数返回,而expect断言会继续执行
数值数据比较断言:
字符串比较断言:
9,参数化:针对不同的用例输入,设置参数化
步骤:
a. class IsPrimeParamTest1 : public::testing::TestWithParam<int> //第一步:声明类,类名(是我们定义的),TestWithParam<int> int型与被测试函数一致
{
b. TEST_P(IsPrimeParamTest1, 参数化)// 第二步,拷贝test_p(第一参数和类名一致的,自定义)
{
int n = GetParam(); //参数化
EXPECT(n); //采用各种断言引用参数N
}
t
C. INSTANTIATE_TEST_CASE_P(returnture, test, testing::Values(var1,var2,var3….));//第三步,定义参数值,其实是用例输入。

gtest使用教程

gtest使用教程

运行截屏
参数化测试
• 参数化测试在有些时候可以简化测试代码的编写,减少其 冗余。不过这个技术较少使用。下面是其一个例子:
class IsPrimeParamTest : public::testing::TestWithParam<int>{}; TEST_P(IsPrimeParamTest, HandleTrueReturn) { int n = GetParam(); EXPECT_TRUE(IsPrime(n)); } // 定义参数 INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5, 11, 23, 17));
后两种事件较为常用,下面一个例子演示其效果。
事件机制实例
class FooTest : public testing::Test { public: static void SetUpTestCase(){ cout << "SetUpTestCase" << endl;} static void TearDownTestCase(){ cout << "TearDownTestCase" << endl;} virtual void SetUp(){ cout << "SetUp" << endl;} virtual void TearDown(){ cout << "TearDown" << endl;} }; TEST_F(FooTest, Test0){ cout << "Test0" << endl;} TEST_F(FooTest, Test1){ cout << "Test1" << endl;}

Linux上使用gtest

Linux上使用gtest

Linux上使⽤gtest
本⽂⽬的
本⽂讲解了如何在linux上配置gtest编写⾃⼰的测试⽤例。

步骤如下
1 下载gtest,点击。

2 将gtest.zip上传到linux上的摸个⽬录
3 cd到这个⽬录
4 解压zip⽂件(命令 “unzip gtest.zip”),会得到gtest-1.X.X的⽬录,⼀下将该⽬录简称为GTEST_HOME。

5 输⼊如下命令,编译gtest:
# cd GTEST_HOME/make
# make
截图如下
会发现多了⼀些⽂件,我们主要关注gtest_main.a和sample1_unittest这两个⽂件,前者设gtest的静态库,后者是⽰例⽂件。

6 验证是否编译成功,输⼊如下命令
# ./sample1_unittest
7 由于gtest_main.a命令不符合libXXX.a的格式,所以可以做⼀个软连接(相当于为gtest_main.a起⼀个别名),键⼊如下命令# ln –s gtest_main.a libgtest.a
# ll
截图如下
8 编写⾃⼰的gtest⽤例,键⼊如下命令
# mkdir ../../gtest_demo
# cd ../../gtest_demo
# vi Makefile
(Makefile的内容在附件中)
# vi gtest_demo.cpp
(gtest_demo.cpp的内容在附件中)
9 输⼊命令
# make
# ./gtest_demo
出现如下结果,恭喜你,配置成功。

具体如何配置,看看makefile就清除了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

玩转Google开源C++单元测试框架GoogleTest系列(gtest)(总)前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错。

我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。

其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们的测试框架,但最后我们还是决定使用gtest取代掉原来的自己的测试框架,原因是:1.不断完善我们的测试框架之后就会发觉相当于把gtest重新做了一遍,虽然轮子造的很爽,但是不是必要的。

2.使用gtest可以免去维护测试框架的麻烦,让我们有更多精力投入到案例设计上。

3.gtest提高了非常完善的功能,并且简单易用,极大的提高了编写测试案例的效率。

如果想对gtest内部探个究竟,就把它的代码下载下来研究吧,这就是开源的好处,哈!官方已经有如此完备的文档了,为什么我还要写呢?一方面是自己记记笔记,好记性不如烂笔头,以后自己想查查一些用法也可以直接在这里查到,一方面是对于不想去看一大堆英文文档的朋友,在我这里可以快速的找到gtest相关的内容。

一、初识gtest1、前言本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。

2、下载如果不记得网址,直接在google里搜gtest,第一个就是。

目前gtest的最新版本为1.3.0 3、编译下载解压后,里面有个msvc目录:使用VS的同学可以直接打开msvc里面的工程文件,如果你在使用的是VS2005或是VS2008,打开后会提示你升级,升完级后,我们直接编译里面的“gtest”工程,可以直接编过的。

这里要提醒一下的是,如果你升级为VS2008的工程,那么你的测试Demo最好也是VS2008工程,不然你会发现很郁闷,你的Demo怎么也编不过,我也曾折腾了好久,当时我升级为了VS2008工程,结果我使用VS2005工程建Demo,死活编不过。

(这里有人误解了,并不是说只能在VS2008中编译,在VS2005中同样可以。

如果要编译VS2005版本,最好保证gtest和你的测试工程都使用VS2005工程。

)编译之后,在msvc里面的Debug或是Release目录里看到编译出来的gtestd.lib或是gtest.lib 文件。

4、第一个Demo下面我们开始建立我们的第一个Demo了,假如之前使用的VS2008编译的gtest,那么,我们在VS2008中,新建一个Win32 Console Application。

接着就是设置工程属性,总结如下:1.设置gtest头文件路径2.设置gtest.lib路径3.Runtime Library设置如果是Release版本,Runtime Library设为/MT。

当然,其实你也可以选择动态链接(/MD),前提是你之前编译的gtest也使用了同样是/MD选项。

工程设置后了后,我们来编写一个最简单测试案例试试,我们先来写一个被测试函数:int Foo(int a, int b){ if (a == 0 || b == 0){ throw "don't do that";} int c = a % b; if (c == 0) return b; return Foo(b, c);}没错,上面的函数是用来求最大公约数的。

下面我们就来编写一个简单的测试案例。

#include <gtest/gtest.h>TEST(FooTest, HandleNoneZeroInput){EXPECT_EQ(2, Foo(4, 10));EXPECT_EQ(6, Foo(30, 18));}上面可以看到,编写一个测试案例是多么的简单。

我们使用了TEST这个宏,它有两个参数,官方的对这两个参数的解释为:[TestCaseName,TestName],而我对这两个参数的定义是:[TestSuiteName,TestCaseName],在下一篇我们再来看为什么这样定义。

对检查点的检查,我们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。

Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT 系列的区别是:1. EXPECT_* 失败时,案例继续往下执行。

2. ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。

在下一篇,我们再来具体讨论这些断言宏。

为了让我们的案例运行起来,我们还需要在main 函数中添加如下代码:int _tmain(int argc, _TCHAR* argv[]){testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();}“testing::InitGoogleTest(&argc, argv);” :gtest的测试案例允许接收一系列的命令行参数,因此,我们将命令行参数传递给gtest,进行一些初始化操作。

gtest的命令行参数非常丰富,在后面我们也会详细了解到。

“RUN_ALL_TESTS()” :运行所有测试案例OK,一切就绪了,我们直接运行案例试试(一片绿色,非常爽):5、总结本篇内容确实是非常的初级,目的是让从来没有接触过gtest的同学了解gtest最基本的使用。

gtest还有很多更高级的使用方法,我们将会在后面讨论。

总结本篇的内容的话:1. 使用VS编译gtest.lib文件2. 设置测试工程的属性(头文件,lib文件,/MT参数(和编译gtest时使用一样的参数就行了))3. 使用TEST宏开始一个测试案例,使用EXPECT_*,ASSER_*系列设置检查点。

4. 在Main函数中初始化环境,再使用RUN_ALL_TEST()宏运行测试案例。

优点:1. 我们的测试案例本身就是一个exe工程,编译之后可以直接运行,非常的方便。

2. 编写测试案例变的非常简单(使用一些简单的宏如TEST),让我们将更多精力花在案例的设计和编写上。

3. 提供了强大丰富的断言的宏,用于对各种不同检查点的检查。

4. 提高了丰富的命令行参数对案例运行进行一系列的设置。

二、断言1、前言这篇文章主要总结gtest中的所有断言相关的宏。

gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。

一个直观的解释就是:1. ASSERT_* 系列的断言,当检查点失败时,退出当前函数(注意:并非退出当前案例)。

2. EXPECT_* 系列的断言,当检查点失败时,继续往下执行。

2、示例// int型比较,预期值:3,实际值:Add(1, 2)EXPECT_EQ(3, Add(1, 2))//假如你的Add(1, 2) 结果为4的话,会在结果中输出:g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16): error: Value of: Add(1, 2)Actual: 4Expected:3如果是将结果输出到xml里的话,将输出:<testcase name="Demo" status="run" time="0" classname="AddTest"><failure message="Value of: Add(1, 2) Actual: 4 Expected: 3"type=""><![CDATA[g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp:16Value of: Add(1, 2)Actual: 4Expected: 3]]></failure></testcase>如果你对自动输出的出错信息不满意的话,你还可以通过操作符<<将一些自定义的信息输出,通常,这对于调试或是对一些检查点的补充说明来说,非常有用!下面举个例子:如果不使用<<操作符自定义输出的话:for (int i = 0; i < x.size(); ++i){EXPECT_EQ(x[i], y[i]);}看到的结果将是这样的,你根本不知道出错时i 等于几:g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Value of: y[i]Actual: 4Expected: x[i]Which is: 3如果使用<<操作符将一些重要信息输出的话:for (int i = 0; i < x.size(); ++i){EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;}从输出结果中就可以定位到在i = 2 时出现了错误。

这样的输出结果看起来更加有用,容易理解:g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(25): error: Value of: y[i]Actual: 4Expected: x[i]Which is: 3Vectors x and y differ at index 23、布尔值检查4、数值型数据检查5、字符串检查ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different contentASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str,actual_str);the two Cstringshave thesamecontent,ignoringcaseASSERT_STRCASENE(str1,str2); EXPECT_STRCASENE(str1,str2); the two C strings have different content, ignoring case*STREQ*和*STRNE*同时支持char*和wchar_t*类型的,*STRCASEEQ*和*STRCASENE*却只接收char*,估计是不常用吧。

相关文档
最新文档