gTest_接口流程测试_框架部署文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

相关文档
最新文档