您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > googletest
1google开源测试框架的使用(googletest)googletest和CppUnit有点类似,功能和作用在文档(它是一篇googletest官方文档的中译版)上面有很详细的描述,本文写了两个实例,它能概括googletest的基本使用。googletest的框架可以从上下载到,本文用的是1.0.1版本的。内容难免有不足和错误,请大家多多指教!1.googletest的框架的组成解压完googletest1.0.1,目录如下:include:头文件msvc和samples是一些例子src就是googletest的源文件2.第一个例子在举例之间,我们先了解一些常用的断言:ASSERT_*版本的断言失败时会产生致命失败,并结束当前函2数。EXPECT_*版本的断言产生非致命失败,而不会中止当前函数。通常更推荐使用EXPECT_*断言,因为它们运行一个测试中可以有不止一个的错误被报告出来。但如果在编写断言如果失败,就没有必要继续往下执行的测试时,你应该使用ASSERT_*断言。致命断言非致命断言验证条件ASSERT_TRUE(condition);EXPECT_TRUE(condition);condition为真ASSERT_FALSE(condition);EXPECT_FALSE(condition);condition为假致命断言非致命断言验证条件ASSERT_EQ(expected,actual);EXPECT_EQ(expected,actual);expected==actualASSERT_NE(val1,val2);EXPECT_NE(val1,val2);val1!=val2ASSERT_LT(val1,val2);EXPECT_LT(val1,val2);val1val2ASSERT_LE(val1,val2);EXPECT_LE(val1,val2);val1=val2ASSERT_GT(val1,val2);EXPECT_GT(val1,val2);val1val2ASSERT_GE(val1,val2);EXPECT_GE(val1,val2);val1=val2致命断言非致命断言验证条件ASSERT_STREQ(expected_str,actual_str);EXPECT_STREQ(expected_str,actual_str);两个C字符串有相同的内容ASSERT_STRNE(str1,str2);EXPECT_STRNE(str1,str2);两个C字符串有不同的内容ASSERT_STRCASEEQ(expected_str,actual_str);EXPECT_STRCASEEQ(expected_str,actual_str);两个C字符串有相同的内容,忽略大小写ASSERT_STRCASENE(str1,str2);EXPECT_STRCASENE(str1,str2);两个C字符串有不同的内容,忽略大小写注意断言名称中出现的“CASE”意味着大小写被忽略了。3例子:(1)我们先新建一个空的Win32控制台应用程序gtest,把googletest中的include下的头文件都加到gtest的头文件中,把src下的实现文件都加到gtest的实现文件中。然后把项目的“配置属性”-“配置类型”改为“静态库(.lib)”。然后我们在同一个工作区内添加一个Win32控制台应用程序SimpleTest,把gtest设为依赖项目。并添加被测文件的头文件func.h和实现文件func.cpp,代码如下头文件:#ifndefFUNC_H#defineFUNC_HintisBool(int);//非返回,0返回intadd(inta,intb);//加法函数intsub(inta,intb);//减法函数#endif实现文件:#includefunc.hintisBool(inta){if(a==0)return0;elsereturn1;}intadd(inta,intb){returna+b;}intsub(inta,intb){returna-b;}(2)添加测试文件code_test.cpp有来测试SimpleTest,代码如下:#includelimits.h#includegtest/gtest.h4#includefunc.h//TEST()的参数是从概括到特殊的。第一个参数是测试案例的名称,第二个参数是//测试案例中的测试的名称。记住,一个测试案例可以包含任意数量的独立测试。一个测试的全称包括了包含它的测试案例名称,及其独立的名称。不同测试案例中的独立测//试可以有相同的名称。TEST(BOOLTEST,isbool){EXPECT_EQ(1,isBool(1));//isBool是函数名称EXPECT_EQ(1,isBool(2));EXPECT_EQ(0,isBool(0));}TEST(ADDTEST,add){EXPECT_EQ(5,add(2,3));EXPECT_EQ(11,add(5,6));EXPECT_EQ(15,add(7,8));}TEST(SUBTEST,sub){EXPECT_EQ(-1,sub(2,3));EXPECT_EQ(-4,sub(5,9));EXPECT_EQ(5,sub(7,2));}接着我们写一个主函数main_test.cpp//testing::InitGoogleTest()函数负责解析命令行传入的GoogleTest标志,并删除所//有它可以处理的标志。这使得用户可以通过各种不同的标志控制一个测试程序的行//为。关于这一点我们会在GTestAdvanced中讲到。你必须在调用RUN_ALL_TESTS()之前//调用该函数,否则就无法正确地初始化标示。#includegtest/gtest.hintmain(intargc,char**argv){testing::InitGoogleTest(&argc,argv);//初始化returnRUN_ALL_TESTS();}最后把SimpleTest设为启动项目,运行如下:5发现我们写了三个测试用例,全部通过了,如果我们把EXPECT_EQ(5,add(2,3))改为EXPECT_EQ(100,add(2,3)),运行如下:我们可以看到,加法测试的第一个测试错了。3.第二个例子上面测试框架的安装以及测试函数TEST的使用,这里介绍一下TEST_F的使用。TEST_F与TEST的区别是TEST_F提供了一个初始化函数(SetUp)和一个清理函数(TearDown),在TEST_F中使用6的变量可以在初始化函数SetUp中初始化,在TearDown中销毁,并且所有的TEST_F是互相独立的,都是在初始化以后的状态开始运行,一个TEST_F不会影响另一个TEST_F所使用的数据。同样我们建一个Win32控制台应用程序gtest,设置也同样。然后我们在同一个工作区内添加一个Win32控制台应用程序SimpleTest,把gtest设为依赖项目demo,同样把gtest设为依赖项目。添加一个被测试类CA,头文件和实现文件如下:头文件:#pragmaonce#ifndefA_H#defineA_HclassCA{public:CA(inta);public:~CA(void);voidadd(inta);intgetA();private:int_a;};#endif实现文件:includeA.hCA::CA(inta){this-_a=a;}CA::~CA(void){}voidCA::add(inta){7this-_a+=a;}intCA::getA(){returnthis-_a;}添加一个测试文件A_test.cpp,如下:#includeA.h#includegtest/gtest.hclassA_test:publictesting::Test{protected:CA*_p_a;virtualvoidSetUp()//初始化函数{this-_p_a=newCA(1);}virtualvoidTearDown()//清理函数{deletethis-_p_a;}};//第一个测试,参数A_test是上面的那个类,第二个参数FirstAdd是测试名称TEST_F(A_test,FirstAdd){EXPECT_EQ(1,_p_a-getA());_p_a-add(3);EXPECT_EQ(4,_p_a-getA());}//第二个测试TEST_F(A_test,SecondAdd){EXPECT_EQ(1,_p_a-getA());_p_a-add(5);EXPECT_EQ(6,_p_a-getA());}/*上面的两个测试都是在SetUp函数执行后的状态下执行,也就是说在执行任意一个TEST_F时_p_a-_a的值都是初始值*/再添加主函数文件main.cpp,如下:8#includegtest/gtest.hintmain(intargc,char*argv[]){testing::InitGoogleTest(&argc,argv);returnRUN_ALL_TESTS();return0;}运行结果如下:测试全部通过,如果我们把EXPECT_EQ(6,_p_a-getA())改为EXPECT_EQ(100,_p_a-getA()),结果如下:由上面发现第二个加法应为100,而实际却是6。9补充:如何在googletest中不运行全部测试实例,而只是运行自己想运行的那些!在googletest的官方主页上有这么一段话,原文如下:RunningaSubsetoftheTests:GTEST_FILTERand--gtest_filterBydefault,aGoogleTestprogramrunsallteststheuserhasdefined.Sometimes,youwanttorunonlyasubsetofthetests(e.g.fordebuggingorquicklyverifyingachange).IfyousettheGTEST_FILTERenvironmentvariableorthe--gtest_filterflagtoafilterstring,GoogleTestwillonlyrunthetestswhosefullnames(intheformofTestCaseName.TestName)matchthefilter.Theformatofafilterisa':'-separatedlistofwildcardpatterns(calledthepositivepatterns)optionallyfollowedbya'-'andanother':'-separatedpatternlist(calledthenegativepatterns).Atestmatchesthefilterifandonlyifitmatchesanyofthepositivepatternsbutdoesnotmatchanyofthenegativepatterns.Apatternmaycontain'*'(matchesanystring)or'?'(matchesanysinglecharacter).Forconvenience,thefilter'*-NegativePatterns'canbealsowrittenas'-Negative
本文标题:googletest
链接地址:https://www.777doc.com/doc-6817114 .html