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是一个用于C++的单元测试框架,它提供了许多有用的工具和宏,用于编写和执行测试用例。
在gtest中,一个测试用例通常包含以下几个部分:
1. 测试环境设置(SetUp):在每个测试用例执行前,设置一个特定的测试环境或状态。
这部分通常包含一些必要的全局初始化和配置,以确保测试能够正常运行。
2. 测试函数:这是实际进行测试的地方。
在此部分中,您会编写一些代码来检查您的代码是否按照预期工作。
这可能包括检查函数调用的结果是否符合预期,或者验证某些条件是否满足。
3. 测试环境清理(TearDown):在每个测试用例执行后,清理测试环境或状态。
这通常包括释放资源、关闭文件、撤销设置等操作,以确保不会对后续的测试造成影响。
gtest执行测试用例的顺序是:为每一个测试用例生成一个测试实例并执行。
每个测试实例先执行SetUp函数,然后执行测试函数,最后执行TearDown函数。
这个顺序是按照测试用例的定义顺序来执行的。
gtest还提供了一些高级特性,比如TEST_F宏可以定义一个测试夹具,用
来共享测试用例之间的数据。
如果多个测试用例都使用同一个测试夹具,那么测试用例的执行顺序就变成了测试夹具的SetUp函数、测试用例的SetUp函数、测试函数、测试用例的TearDown函数、测试夹具的TearDown函数。
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 deletearg的使用方式
gtest deletearg的使用方式在谷歌测试框架(Google Test)中,gtest_deletearg是一个用于删除参数的宏,它可以在运行测试用例时忽略指定的参数。
本文将详细介绍gtest_deletearg的使用方式。
gtest_deletearg宏的语法如下:```cppGTEST_DELETE_ARG(TestSuiteName, TestName, ArgName)```其中,TestSuiteName是测试套件的名称,TestName是测试用例的名称,ArgName是要删除的参数的名称。
gtest_deletearg宏用于在运行测试用例时删除指定的参数。
在使用这个宏之前,需要确保谷歌测试框架已经正确地安装在开发环境中。
要使用gtest_deletearg宏,需要按照以下步骤进行:1.创建测试套件和测试用例首先,需要创建一个测试套件和一个或多个测试用例。
测试套件用于组织相关的测试用例,测试用例用于定义具体的测试逻辑。
```cpp#include "gtest/gtest.h"//测试套件class MyTestSuite : public ::testing::Test {protected://在测试用例执行前的初始化操作void SetUp() override {//初始化代码}//在测试用例执行后的清理操作void TearDown() override {//清理代码}};//测试用例TEST_F(MyTestSuite, MyTestCase) {//测试代码}```2.使用gtest_deletearg宏删除参数在测试用例中,可以使用gtest_deletearg宏删除指定的参数。
根据测试用例的具体需求,可以选择是否删除参数。
```cppTEST_F(MyTestSuite, MyTestCase) {//删除参数GTEST_DELETE_ARG(MyTestSuite, MyTestCase, ArgName);//测试代码}```以上代码将删除MyTestCase测试用例中的ArgName参数。
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,死活编不过。
使用gtest自动化测试并给出性能测试结果(windows版本,版本平台也可以使用,但并没。。。
使⽤gtest⾃动化测试并给出性能测试结果(windows版本,版本平台也可以使⽤,但并没。
/**************************************************************使⽤gtest⾃动化测试**************************************************************/[依赖项]eclips KEPLERcygwinwindow xpgtest库cmd已是管理员权限[gtest 搭建]a)、⾸先确定已成功安装好了eclips C++ 开发相关的⼯具,并确定g++的环境变量已能正常使⽤b)、打开eclips,新建两个项⽬,gtest(appliction),testlibs(static library),c)、解压gtest库,copy (include,src)到新建好的gtest⽬录中d)、排除库⽂件的编译 gtest库中的所有⽂件,选中gtest项⽬中的include⽂件夹,右键->属性-> c/c++build -> 选中exclude resouce form build,再⽤同样的⽅法去掉src⽂件夹的编译设置e)、设置编译头⽂件,选中gtest项⽬->右键->属性->c/c++1)、选中setting -> 选中tool settings -> 选中 cross g++ compiler -> 选中includes ->添加include paths"${workspace_loc:/${ProjName}/include}","${workspace_loc:/${ProjName}}","${workspace_loc:/testlibs}"2)、点击apply,再点okf)、在gtest项⽬中新增加⼀个⽂件并输⼊下⾯的代码//-------------------------------#include "gtest/gtest.h"#include "src/gtest_"#include "src/"//-------------------------------g)、选中gtest项⽬中的include⽂件夹,右键->属性->c/c++build -> 选中build steps 在post-build steps的command中输⼊"..\auto_test.bat"h)、编写脚本1)、向gtest项⽬中增加⼀个auto_test.bat⽂件2)、输⼊脚本@gtest.exe > out.logI)、在testlibs中写⼊⽬标代码(新建了⼀个class类的声明和定义)test-class.h://code begin-----------------------#ifndef TEST_CLASS_H_#define TEST_CLASS_H_class test_class{public:int write();};#endif /* TEST_CLASS_H_ *///code end-------------------------://code begin------------------------#include "test-class.h"int test_class::write(){return 10;}//code end------------------------J)、在gtest项⽬中编写测试⽤列(添加)://------------------------#include "gtest/gtest.h"#include <test-class.h>TEST(TESTCASE,TEST){test_class test;//test.write();EXPECT_EQ(10,test.write());}TEST(TESTCASE1,TEST1){FAIL(); //⼿动增加⼀个失败的测试}//------------------------k)正常编译gtest项⽬l)、打开eclips的console,就会看到测试输出的⼀些信息,那就是测试报告console://------------------------Running main() from gtest_[==========] Running 1 test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from TESTCASE[ RUN ] TESTCASE.TEST[ OK ] TESTCASE.TEST (0 ms)[----------] 1 test from TESTCASE (30 ms total)[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (30 ms total)[ PASSED ] 1 test.[性能测试搭建]a) 修改gtest项⽬属性1)、选中gtest项⽬(alt+enter)->打开(c/c++ build 节点)-> setting-> cross g++ compiler2)、修改command 原为 g++ ,改为 g++ -pg3)、打开(cross g++ linker) -> 修改command 原为 g++ ,改为 g++ -pgb) 修改testlibs项⽬属性1)、选中testlibs项⽬(alt+enter)->打开(c/c++ build 节点)-> setting-> cross g++ compiler2)、修改command 原为 g++ ,改为 g++ -pg3)、打开(cross g++ linker) -> 修改command 原为 g++ ,改为 g++ -pgc)、修改脚本auto_test.bat::修改out的值就可以开启和关闭是否执⾏测试 0为开启⽤//code begin-----------------@set out=1::gtest⽂件输出格式0 txt,1 xml@set testOutType=0::test⽇志⽂件输出⽂件名@set log="out.log";@if %testOutType%==1 then ( %log%="out.xml")@if "%out%"==0 then goto lable1 else goto lable2:lable1@echo "---------start unit test----"@echo "---------unit test results----------">log::@gtest.exe --gtest_output="xml:%log%"@gtest.exe >log@echo "---------Performance Test Results----------">>log@if exist "gmon.out" (goto lable3) else (goto lable4):lable3@(gprof gtest.exe gmon.out -b) >>log@echo "---------test complet----------">>log@cat log@echo "Full output has been output to a log file."::open log file@notepad log:lable2@echo "">loggoto exit;:lable4@goto exit;::exit script:exit@exit(0)//code end-----------d)、打开consol 窗⼝,⽣成项⽬:选中项⽬ (ctrl+b),编译操作完成后会⾃⼰打测试报告e)、查看性能测试报告"---------Performance Test Results----------"Flat profile:Each sample counts as 0.01 seconds.% cumulative self self totaltime seconds seconds calls Ts/call Ts/call name19.16 1.40 1.40 xis_data::set_data(xis_data const&)18.96 2.77 1.38 xis_data_array::append(xis_data)Call graphgranularity: each sample hit covers 4 byte(s) for 0.14% of 7.28 secondsindex % time self children called name<spontaneous>[1] 19.2 1.40 0.00 xis_data::set_data(xis_data const&) [1]-----------------------------------------------<spontaneous>[2] 19.0 1.38 0.00 xis_data_array::append(xis_data) [2]-----------------------------------------------<spontaneous>"---------end Performance Test Results----------"f)、输出报告包括(单元测试、性能测试)console://------------------------Running main() from gtest_[==========] Running 1 test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from TESTCASE[ RUN ] TESTCASE.TEST[ OK ] TESTCASE.TEST (0 ms)[----------] 1 test from TESTCASE (30 ms total)[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (30 ms total)[ PASSED ] 1 test."---------Performance Test Results----------"Flat profile:Each sample counts as 0.01 seconds.% cumulative self self totaltime seconds seconds calls Ts/call Ts/call name19.16 1.40 1.40 xis_data::set_data(xis_data const&) 18.96 2.77 1.38 xis_data_array::append(xis_data) Call graphgranularity: each sample hit covers 4 byte(s) for 0.14% of 7.28 seconds index % time self children called name<spontaneous>[1] 19.2 1.40 0.00 xis_data::set_data(xis_data const&) [1] -----------------------------------------------<spontaneous>[2] 19.0 1.38 0.00 xis_data_array::append(xis_data) [2]-----------------------------------------------<spontaneous>"---------end Performance Test Results----------"g)、关闭报告,测试结束 (⼀定要操作这⼀步,否则eclips会⽆法操作)。
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软件文档说明书
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使用
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….));//第三步,定义参数值,其实是用例输入。
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就清除了。
GTest使用说明材料
玩转Google开源C++单元测试框架Google Test系列(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,死活编不过。
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 使用方法
GTest 是一个功能强大的 C++ 测试框架,以下是其使用方法:
1. 安装 GTest:首先需要下载并安装 GTest,可以从 GTest 官网或其他镜像站点下载编译好的二进制文件或源代码,然后按照说明进行安装。
2. 创建测试工程:在开发环境中创建一个新的项目或工作空间,用于编写和运行测试代码。
3. 编写测试代码:在测试工程中创建一个新的 C++ 源文件,并编写测试代码。
测试代码应该包含测试用例,每个测试用例是一个独立的函数,用于测试特定的功能或行为。
可以使用 GTest 提供的数据驱动框架和参数化测试框架来编写更加灵活和可维护的测试代码。
4. 配置测试环境:在测试工程中设置环境变量,指定 GTest 二进制文件的路径和其他相关配置。
5. 编译测试代码:使用编译器将测试代码编译成可执行文件。
6. 运行测试:执行可执行文件,查看测试结果。
可以使用命令行参数来控制测试的运行方式和输出格式。
7. 分析测试结果:根据测试结果判断代码是否符合预期,如果有问题需要进行调试和修复。
以上是 GTest 的基本使用方法,具体操作可能会因开发环境和项目需求而有所不同。
建议参考 GTest 的官方文档和示例代码,了解更多关于 GTest 的使用方法和最佳实践。
GTEST单元测试框架的使用
GTEST单元测试框架的使⽤单元测试在产品开发中,是对我们代码运⾏结果核对的有⼒保障,可以有效减少产品开发测试出现的bug,也能随时记录接⼝调⽤⽰例,并随时对我们的测试⽬标进⾏检查。
GTEST测试框架是Goole发布的⽀持Windows/Linux/MacOS的单元测试框架。
1.TEST宏TEST(test_case_name, test_name) -> 创建⼀个简单的测试案例TEST_F(test_fixture, test_name) -> 使⽤测试夹具进⾏资源类固定化,可将资源⽤于多个测试案例中PS : test_fixture是⼀个test fixture class,是继承testing::Test的⼀个类,按照官⽅⽰例如下class FooTest : public testing::Test {protected:virtual void SetUp() { b_.AddElement(3); }Foo a_;Foo b_;};TEST_F(FooTest, InitializesCorrectly) {EXPECT_TRUE(a_.StatusIsOK());}TEST_F(FooTest, ReturnsElementCountCorrectly) {EXPECT_EQ(a_.size(), 0);EXPECT_EQ(b_.size(), 1);}下⾯简单写下测试案例1// 资源固定化2class ReadDicom :public::testing::Test3 {4protected:5virtual void SetUp()6 {7 ct_infilepath = gettestfile("ct.dcm");8 ct_outfilepath = gettestfile("ct1.dcm");910 st_infilepath = gettestfile("st.dcm");11 st_outfilepath = gettestfile("st1.dcm");1213 dose_infilepath = gettestfile("dose.dcm");14 dose_outfilepath = gettestfile("dose1.dcm");1516 dose_infilepath = gettestfile("RD_A 2_6678_20190806175756.dcm");17 dose_outfilepath = gettestfile("RD_A 2_6678_201908061757561.dcm");1819 plan_infilepath = gettestfile("plan.dcm");20 plan_outfilepath = gettestfile("plan1.dcm");21 }22 DICOMMode dicom;23string ct_infilepath;24string ct_outfilepath;25string st_infilepath;26string st_outfilepath;27string dose_infilepath;28string dose_outfilepath;29string plan_infilepath;30string plan_outfilepath;31private:32string gettestfile(string filename)33 {34char buffer[_MAX_PATH];35 _getcwd(buffer, _MAX_PATH);36string filepath = string(buffer) + "\\testfile\\" + filename;37return filepath;38 }39 };4041// CT⽂件读写42 TEST_F(ReadDicom, CT)43 {44 DICOMMode dicom1;45 ASSERT_TRUE(dicom.ReadDicomInfo(ct_infilepath)) << dicom.get_lasterror();46 ASSERT_TRUE(dicom1.putDicomType(DicomType::CTImage_Type)) << dicom1.get_lasterror();47 CT_Dicom t = dicom.getCTDicom();48 ASSERT_TRUE(dicom1.putCTDicom(t)) << dicom1.get_lasterror();49 ASSERT_TRUE(dicom1.WriteDicomInfo(ct_outfilepath)) << dicom1.get_lasterror();50 }5152// Struct⽂件读写53 TEST_F(ReadDicom, STRUCT)54 {55 DICOMMode dicom1;56 ASSERT_TRUE(dicom.ReadDicomInfo(st_infilepath)) << dicom.get_lasterror();57 ASSERT_TRUE(dicom1.putDicomType(DicomType::RTStruct_Type)) << dicom1.get_lasterror();58 RTStruct_Dicom t = dicom.getRTStructDicom();59 ASSERT_TRUE(dicom1.putRTStructDicom(t)) << dicom1.get_lasterror();60 ASSERT_TRUE(dicom1.WriteDicomInfo(st_outfilepath)) << dicom1.get_lasterror();61 }1//整套数据读写2 TEST(WHOLEFILE, wholefile)3 {4string dirpath = "D:\\myfile\\dicom_code\\dicom_file\\Dicom\\DICOMModeUnitTest\\testfile\\Plan";5string outdirpath = "D:\\myfile\\dicom_code\\dicom_file\\Dicom\\DICOMModeUnitTest\\testfile\\Plan1";67string tmpstr = dirpath + "\\*.*";8 HANDLE hFind;9 WIN32_FIND_DATA findData;10 hFind = FindFirstFile(tmpstr.data(), &findData);11if (hFind != INVALID_HANDLE_VALUE)12 {13do14 {15if (strcmp(findData.cFileName, ".") == 016 || strcmp(findData.cFileName, "..") == 017 || strcmp(findData.cFileName, "Plan") == 0)18continue;19string filepath = dirpath + "\\" + findData.cFileName;20string outfilepath = outdirpath + "\\" + findData.cFileName;21 DICOMMode dicom;22 dicom.ReadDicomInfo(filepath);23 dicom.WriteDicomInfo(outfilepath);2425 } while (FindNextFile(hFind, &findData));26 }27 }2.ASSERT_、EXPECT_系列的检查结果是否正确ASSERT_系列:bool值检查1、 ASSERT_TRUE(参数),期待结果是true2、ASSERT_FALSE(参数),期待结果是false数值型数据检查3、ASSERT_EQ(参数1,参数2),传⼊的是需要⽐较的两个数 equal4、ASSERT_NE(参数1,参数2),not equal,不等于才返回true5、ASSERT_LT(参数1,参数2),less than,⼩于才返回true6、ASSERT_GT(参数1,参数2),greater than,⼤于才返回true7、ASSERT_LE(参数1,参数2),less equal,⼩于等于才返回true8、ASSERT_GE(参数1,参数2),greater equal,⼤于等于才返回true字符串检查9、ASSERT_STREQ(expected_str, actual_str),两个C风格的字符串相等才正确返回10、ASSERT_STRNE(str1, str2),两个C风格的字符串不相等时才正确返回11、ASSERT_STRCASEEQ(expected_str, actual_str)12、ASSERT_STRCASENE(str1, str2)EXPECT_系列和ASSERT_系列⽤法差不多在上⾯某些案例中可以看到<<,这个操作符是可以帮助在出现错误的时候输出某些错误信息到测试界⾯上,⽅便我们定位!单元测试YYDS!后⾯想到其他的再继续进⾏补充~。
gtest 用例执行顺序
gtest 用例执行顺序gtest是一个流行的C++测试框架,它可以帮助开发人员编写高质量的单元测试。
在使用gtest时,测试用例的执行顺序非常重要,因为它可以影响测试结果的准确性。
下面将介绍gtest测试用例的执行顺序。
1. SetUpTestCase和TearDownTestCase在执行测试用例之前,gtest会先执行SetUpTestCase函数。
这个函数可以用来初始化测试用例所需的资源。
例如,如果测试用例需要连接数据库,那么可以在SetUpTestCase函数中建立数据库连接。
当测试用例执行完毕后,gtest会执行TearDownTestCase函数,用来释放测试用例所占用的资源。
例如,可以在TearDownTestCase 函数中关闭数据库连接。
2. SetUp和TearDown在执行每个测试用例之前,gtest会先执行SetUp函数。
这个函数可以用来初始化测试用例所需的变量。
例如,如果测试用例需要测试一个函数,那么可以在SetUp函数中创建函数所需的参数。
当测试用例执行完毕后,gtest会执行TearDown函数,用来释放测试用例所占用的变量。
例如,可以在TearDown函数中释放函数所需的参数。
3. 测试用例在执行测试用例时,gtest会按照测试用例的顺序依次执行。
每个测试用例都应该是独立的,不应该依赖于其他测试用例的结果。
例如,如果测试用例A需要测试函数F的返回值,那么应该在测试用例A中调用函数F,而不是在其他测试用例中调用函数F并将结果传递给测试用例A。
4. EXPECT和ASSERT在测试用例中,gtest提供了两种断言方式:EXPECT和ASSERT。
EXPECT断言用于判断测试结果是否符合预期,如果不符合预期,则会输出错误信息,但测试用例会继续执行。
ASSERT断言用于判断测试结果是否符合预期,如果不符合预期,则会输出错误信息,并且测试用例会立即停止执行。
因此,ASSERT断言应该谨慎使用,只在必要时才使用。
gtest 参数
gtest 参数1. 什么是 gtest?gtest(Google Test)是一个由 Google 开发的 C++ 测试框架,用于编写和运行单元测试。
它提供了丰富的断言函数和丰富的命令行参数,使得测试代码编写更加简单、灵活和可靠。
2. gtest 的安装与配置2.1 安装 gtest在使用 gtest 进行测试之前,需要先将其安装到开发环境中。
•在 Ubuntu 系统上,可以通过以下命令安装 gtest:sudo apt-get install libgtest-dev•在 Windows 系统上,可以从 [gtest 官方网站]( 下载最新版本的源代码,并将其编译成库文件。
2.2 配置项目完成安装后,需要将 gtest 配置到项目中,以便能够使用其中的功能。
•在 CMakeLists.txt 文件中添加以下内容:find_package(GTest REQUIRED)include_directories(${GTEST_INCLUDE_DIRS})add_executable(tests test.cpp)target_link_libraries(tests ${GTEST_LIBRARIES} pthread)此处假设测试代码文件为 test.cpp。
3. 使用 gtest 进行单元测试3.1 编写测试代码在开始编写测试代码之前,需要确定要进行测试的函数或类,并创建对应的测试文件。
下面是一个示例的测试函数:#include <gtest/gtest.h>// 要测试的函数int add(int a, int b) {return a + b;}// 测试用例TEST(AddTest, PositiveNumbers) {EXPECT_EQ(add(2, 3), 5);}TEST(AddTest, NegativeNumbers) {EXPECT_EQ(add(-2, -3), -5);}3.2 运行测试编写完测试代码后,可以使用 gtest 提供的命令行参数来运行测试。
gtest使用说明
gtest使用说明gtest-1.6为google的测试框架。
可用于本组的单元测试。
安装步骤如下:1、取http://10.78.13.228/svn/otnm2000svn/Develop/Src/ext/gtest目录下全部数据,本地默认目录为D:\OTNM\src\ext\gtest。
2、Gtest的目录结构:D:\OTNM\src\ext\gtest\include为头文件,使用gtest.h即可。
D:\OTNM\src\ext\gtest\lib\msvc为lib库,使用gtestd.lib即可,这个lib为debug版本。
3、如有兴趣研究gtest,可以编译D:\OTNM\src\ext\gtest\msvc\gtest.sln下面的工程。
其中gest工程用于生成gtest.lib库。
gtest_unittest工程是一个例子。
4、取gtest的测试Demo:http://10.78.13.228/svn/otnm2000svn/Develop/Src/test/gtestdem o。
本地默认目录为D:\OTNM\src\test\gtestdemo。
打开gtestdemo工程。
并编译。
可以查看测试结果。
工程中使用了D:\OTNM\src\ext\gtest\samples下的测试用例。
你可以自行添加后,测试。
5、网上相关资料:编写优美的GTest测试案例Google C++ Mocking Framework使用简介/%B3%A3%D1%C5%C3%F4/blog/item/ec5a04187796 fb62dab4bdd1.html。
6、自己建立gtest测试工程文件时,需要注意以下几个设置:Gtest的include目录设置:Gtest的lib目录设置:。
gtest用法
gtest用法Google Test(简称gTest)是谷歌开发的一款C++单元测试框架。
使用gTest可以方便地进行单元测试,它提供了各种各样的断言(比如EXPECT_EQ, ASSERT_EQ,EXPECT_TRUE等),方便开发人员编写测试代码并检测代码的正确性。
下面是使用gtest进行一个简单测试的示例代码:```#include <gtest/gtest.h>#include <string>using namespace std;TEST(testString, stringLen) {// 测试字符串长度string str = "hello world";EXPECT_EQ(str.length(), 11);}int main(int argc, char** argv) {// 初始化gtesttesting::InitGoogleTest(&argc, argv);// 运行所有测试return RUN_ALL_TESTS();}```在上面的代码中,我们使用gTest测试了一个字符串的长度。
首先,我们定义了一个TEST宏,该宏用于指定测试用例的名称和要测试的功能。
然后,我们在测试用例中使用了一个EXPECT_EQ断言,该断言用于判断字符串的长度是否等于11。
在main函数中,我们调用testing::InitGoogleTest()函数初始化gTest,并最终调用RUN_ALL_TESTS()函数运行所有的测试用例。
为了使用gTest,我们需要在项目中包含gtest.h头文件,并将gtest库链接到我们的项目中。
参考官方文档可以轻松完成这些步骤。
总之,gTest是一款非常强大的C++单元测试框架,它可以帮助开发人员编写更加健壮的代码。
gtest insequence的使用方法 -回复
gtest insequence的使用方法-回复gtest是谷歌的一个开源测试框架,它能够帮助开发者编写和运行C++的单元测试。
其中,gtest提供了一个特性叫做"insequence",这个特性允许开发者按照特定的顺序执行测试用例,而不是按照默认的随机顺序执行。
在本文中,我将一步一步地解释在gtest中如何使用"insequence"特性。
第一步:安装和配置gtest首先,我们需要将gtest框架安装在我们的项目中。
你可以从谷歌的官方github页面上下载gtest的源代码,并按照其中的说明进行安装。
安装完成后,你需要在你的项目中配置gtest,以确保它能够被正确地链接和执行。
第二步:编写测试用例函数接下来,我们需要编写一些测试用例函数。
每个测试用例函数都是一个独立的函数,用于测试代码的一部分。
在gtest中,每个测试用例函数都是由宏TEST()定义的。
例如:TEST(TestCaseName, TestName) {... test body ...}其中,"TestCaseName"是一个字符串,用于描述测试用例的名称,而"TestName"则是用于描述当前测试用例函数的名称。
第三步:使用"insequence"特性使用"insequence"特性来指定测试用例执行的顺序非常简单。
你只需要在需要指定顺序的测试用例函数前面添加一个注释,如下所示:TEST(TestCaseName, TestName) {这是第一个测试用例函数}TEST(TestCaseName, TestName2) {这是第二个测试用例函数}当你指定了测试用例函数的顺序后,gtest就会按照你的指定顺序来执行这些测试用例函数。
第四步:运行测试当你完成了所有测试用例函数的编写,并且使用"insequence"特性指定了它们的顺序后,你可以使用gtest提供的命令行工具来运行测试。
gtest expect_call用法 -回复
gtest expect_call用法-回复标题:gtest expect_call用法详解Google Test(gtest)是Google提供的一个强大的C++测试框架,它提供了一套丰富的断言和匹配器,使得单元测试变得更加简单和高效。
在gtest中,"expect_call"是一个重要的函数,用于设置对mock对象的预期调用。
本文将详细解析gtest的expect_call用法。
一、理解Mock对象在进行单元测试时,我们常常需要隔离被测试代码与外部环境的交互。
这时,Mock对象就派上了用场。
Mock对象是一种特殊的设计,它可以模拟真实对象的行为,但在测试过程中,我们可以控制其行为以满足特定的测试需求。
二、引入expect_call在gtest中,我们使用Google Mock库来创建和管理Mock对象。
expect_call就是Google Mock提供的一种预设Mock对象行为的方法。
通过expect_call,我们可以指定Mock对象在接收到特定调用时应该如何响应。
三、expect_call的基本用法以下是一个简单的expect_call用法示例:cppclass MockFoo {public:MOCK_METHOD(void, Bar, (int), (override));};TEST(FooTest, TestBar) {MockFoo foo;EXPECT_CALL(foo, Bar(1)).Times(1); 预期foo.Bar(1)将被调用一次foo.Bar(1); 实际调用foo.Bar(1)}在这个例子中,我们首先定义了一个Mock类MockFoo,并在其上声明了一个虚拟方法Bar。
然后,在测试函数FooTest.TestBar中,我们创建了一个MockFoo对象foo,并使用EXPECT_CALL宏设置了对foo.Bar(1)的预期调用。
最后,我们实际调用了foo.Bar(1),验证了预期调用的正确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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、布尔值检查ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2);the two CstringshavedifferentcontentASSERT_STRCASEEQ(expected_str,actual_str);EXPECT_STRCASEEQ(expected_str,actual_str);the two Cstringshave thesamecontent,ignoringcase ASSERT_STRCASENE(str1,str2); EXPECT_STRCASENE(str1,str2);the two Cstringshavedifferentcontent,ignoringcase*STREQ*和*STRNE*同时支持char*和wchar_t*类型的,*STRCASEEQ*和*STRCASENE*却只接收char*,估计是不常用吧。
下面是几个例子:TEST(StringCmpTest, Demo){ char* pszCoderZh = "CoderZh";wchar_t* wszCoderZh = L"CoderZh";std::string strCoderZh = "CoderZh";std::wstring wstrCoderZh = L"CoderZh";EXPECT_STREQ("CoderZh", pszCoderZh);EXPECT_STREQ(L"CoderZh", wszCoderZh);EXPECT_STRNE("CnBlogs", pszCoderZh);EXPECT_STRNE(L"CnBlogs", wszCoderZh);EXPECT_STRCASEEQ("coderzh", pszCoderZh); //EXPECT_STRCASEEQ(L"coderzh", wszCoderZh); 不支持EXPECT_STREQ("CoderZh", strCoderZh.c_str());EXPECT_STREQ(L"CoderZh", wstrCoderZh.c_str());}6、显示返回成功或失败直接返回成功:SUCCEED();返回失败:Fatal assertion Nonfatal assertionFAIL(); ADD_FAILURE();TEST(ExplicitTest, Demo){ADD_FAILURE() << "Sorry"; // None Fatal Asserton,继续往下执行。