如何用googletest写C++ test_f 单元测试试

一般来说简单的测试用TEST

两个及以仩的测试使用相同的数据,可以使用 test fixtures.使用相同的数据测试几个不同的测试.

2.在类中,声明任何计划准备使用的任何对象.

3.如果需要,写一个默认的构慥函数或者SetUp()函数,为测试准备对象.注意大小写

4.如果需要,写一个析构函数或TearDown()函数,释放各种资源.注意大小写

什么时候使用构造函数和析构函数,或SetUp函数和TearDown函数?

5.如果需要定义测试共享的子程序.

使用EXPECT_CALL()宏来设置一个mock函数调用的预期结果其语法为:

第一个参数是mock对象,第二个参数是mock函数名忣其参数二者中间是以逗号(而不是点号)分隔的,至于为什么是这样回答只有一个:技术原因。

宏后面还可以紧跟若干语句以提供对mock函数调用的预期结果的更多信息。这种风格的语法被一些人称作是“特定领域语言”(Domain-SpecificLanguageDSL


#2表示想定义的那个方法名称。


目前gtest提供的是1.6.0版本我们看看与鉯往版本1.5.0的区别:


先进入gtest目录(解压gtest.zip包过程就不说了),执行以下两行命令:


之后生成了libgtest.a,这个就是我们要的东东了以后写自己的C++ test_f 单え测试试,就需要libgtest.a和gtest目录下的include目录所以,这1文件1目录我们需要拷贝到自己的工程中

编译完成后怎么验证是否成功了呢?(相当不友好!)

2、如何编写C++ test_f 单元测试试用例

以一个例子来说我写了一个开地址的哈希表,它有del/get/add三个主要方法需要测试在测试的时候,很自然我呮希望构造一个哈希表对象,对之做许多种不同组合的操作以验证三个方法是否正常。所以gtest提供的TEST方式我不会用,因为多个TEST不能共享哃一份数据而且还有初始化哈希表对象的过程呢。所以我用TEST_F方式TEST_F是一个宏,TEST_F(classname, casename){}在函数体内去做具体的验证

上面是我要执行C++ test_f 单元测试试嘚类图。那么我需要写一系列C++ test_f 单元测试试用例来测试这个类。用gtest首先要声明一个类,继承自gtest里的Test类:

然后开始写测试用例用例里可鉯直接使用上面类中的成员。


注意TEST_F宏会直接生成一个类,这个类继承自上面我们写的CHashTableTest类

gtest提供ASSERT_和EXPECT_系列的宏,用于判断二进制、字符串等對象是否相等、真假等等这两种宏的区别是,ASSERT_失败了不会往下执行而EXPECT_会继续。

首先我们自己要有一个main函数,函数内容非常简单:

执荇时假设我们编译出的可执行文件叫unittest,那么直接执行./unittest就会输出结果到屏幕例如:


可以看到,对于错误的CASE会标出所在文件及其行数。

洳此一个简单的C++ test_f 单元测试试写完。因为太简单所以不需要使用google mock模拟一些依赖。后续我再写结合google mock来写一些复杂的gtestC++ test_f 单元测试试

下面来简單说下gtest的工作流程。

4、google test内部是如何执行我们的C++ test_f 单元测试试用例的

首先从main函数看起

我们的main函数执行了RUN_ALL_TESTS宏,这个宏干了些什么事呢


原来是調用了UnitTest静态工厂实例的Run方法!在gtest里,一切测试用例都是Test类的实例!所以Run方法将会执行所有的Test实例来运行所有的C++ test_f 单元测试试,看看类图:


為什么说一切C++ test_f 单元测试试用例都是Test类的实例呢

我们有两种写测试用例的方法,一种就是上面我说的TEST_F宏这要求我们要显示的定义一个子類继承自Test类。在TEST_F宏里会再次定义一个新类,继承自我们上面定义的子类(两重继承哈)

第二种就是TEST宏,这个宏里不要求用户代码定义類但在google test里,TEST宏还是定义了一个子类继承自Test类

所以,UnitTest的Run方法只需要执行所有Test实例即可

每个C++ test_f 单元测试试用例就是一个Test类子类的实例。它哃时与TestResultTestCase,TestInfo关联起来用于提供结果。

当然还有EventListen类来监控结果的输出,控制测试的进度等


以上并没有深入细节,只是大致帮助大家理解我们写的几个简单的gtest宏,和C++ test_f 单元测试试用例到底是如何被执行的。接下来我会通过gmock来深入的看看googleC++ test_f 单元测试试的玩法。

TEST_F(TestXY, 2的0.5次方为1.414) 这种表述通常会报错,主要是使用了英文符号“.”另外,-1这种描述也会报错有什么方法能解决吗? 

我要回帖

更多关于 C++ test_f 单元测试 的文章

 

随机推荐