gTest_接口流程测试_框架部署文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
gTest测试框架的部署
一、gTest简介
1、gtest框架结构
gtest使用了xUnit的框架,xUnit的框架的公共的特点是包含了一下几个元素:
∙test case:测试用例集
∙test:测试用例
∙test fixture:构造测试用例的公共前提条件或状态
∙test setup:构造测试的前提条件或状态
∙test teardown:还原到测试执行前的状态
∙assertion:断言,用于检查
2、gtest的源代码结构
如下图
简单说一下目录结构:
msvc是针对visual studio创建的gtest的工程文件,make文件夹下是针对linux的Makefile,xcode和codegear不用解释了。script文件夹下是一些脚本用于产生测试用例的,test下是测试gtest框架本身的一些代码。其中源代码包含在include、src两个文件夹中着重看一下src文件夹中的这些源文件。
文件实现了gtest的框架和对外接口
gtest_定义的main函数
包含了所有源文件
实现了死亡测试相关的内容
定义了一写平台移植相关的内容
定义了参数化测试的内容
gtest-internal-inl.h是gtest内部使用的,用户不应该包含该头文件,否则会编译出错3、gtest的主要函数介绍
1)main函数
我们看代码一般习惯从main函数开始入手,我们就先从main函数说起吧,gtest为我们提供标准的main函数,在src/gtest_文件中,内容如下。
这是一个非常简单的main 函数,先看库文件,gtest.h 库文件定义了gtest 向外提供的所有API ,这个库中包括两个命名空间
testing :包含了开放给用户使用的API 。
testing::internal :定义了gtest 的一些内部实现。
2)InitGoogleTest
函数
InitGoogleTest()函数是gtest 对外提供的一个接口函数,里面封装了一个内部的实现,代码很简单
InitGoogleTestImpl()是定义在internal 中的实现,注意gtest 中很多地方使用了这样的形式,对外接口只是简单的封装,具体实现在internal 中。这样做的好处也是明显的,对外提供统一稳定的接口,即使内部实现产生大的变动时,也不会影响到建立在gtest 框架上的程序的编译和执行。
InitGoogleTest()的主要功能是完成参数的解析和创建一个UnitTest 的实例,关于UnitTest 将在后面讲到。并且InitGoogleTest()在一个程序中只能调用一遍,因为在internal 里定义了一个全局变量来计数InitGoogleTest()运行的次数,运行
InitGoogleTest()时会先检查这个变量,超过1则直接返回。
3)InitGoogleTestImpl 函数
InitGoogleTestImpl()方法中定义了初始化共做主要代码如下:
argv是传入的命令行参数,gtest支持命令行参数,InitGoogleTestImpl()中的ParseGoogleTestFlagsOnly()对参数进行了解析并设置了相应个flag并不做其他的初始化工作,而GetUnitTestImpl()->PostFlagParsingInit()通过UnitTestImpl类中的PostFlagParsingInit()方法根据相应的flag初始化gtest。
下面着重说一下UnitTest,UnitTest也是一个对外的接口类,其功能就是负责维护和执行所有的test。他是一个singleton,只能通过GetInstance()方法获得唯一的实例,它的内部有一个指向UnitTestImpl类的指针,UnitTestImpl是定义在internal中的UnitTest 的实现,UnitTestImpl将UnitTest声明为友元类,这样UnitTest就可以访问UnitTestImpl中的成员来完成功能。
二、gtest部署步骤:
1、将mvsc中的gtest工程打开,编译release或者debug都可以。但这与后面的测试程序
的某些选项相关。此处配置为编译成debug的。
2、编译完成后在mvsc\gtest\debug下生产gtestd.lib文件讲gtest下的include文件夹和编译
生产gtestd.lib,按照如下目录放置:
新建一个gtest目录,讲include文件夹拷贝到其中,然后再建一个lib文件夹。讲gtest的lib 库拷贝其中。目录如下图所示:
3、新建一个Win32 Console Application 的空程序。
4、然后添加sample.cpp、test_Unit.cpp和sample.h文件。
5、编写代码:
1)编写被测程序,将下面代码复制到sample.cpp中
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);
}
2)编写被测程序头文件,将下面代码复制到sample.h头文件中
#ifndef GTEST_SAMPLES_SAMPLE1_H_
#define GTEST_SAMPLES_SAMPLE1_H_
// Returns n! (the factorial of n). For negative n, n! is defined to be 1.