《GTest单元测试》PPT课件

合集下载

单元测试与集成测试PPT演示文稿

单元测试与集成测试PPT演示文稿
增量集成测试会有格外的开销,但会大大减少 发现和改正错误的时间。
0C202 SoChfatwptear 5re
5-28
Testing
M1
M2
M3
M4
M5
M6
M7
M8
自顶向下的集成 集成方式:深度优先、广度优先
0C202 SoChfatwptear 5re
5-29
Testing自顶向下来自成在现实中一般是结合使用深度优先、宽度优先进 行测试。
5-22
Testing
集成测试 (1/3)
单独的软件模块被结合在一起,作为一个群接受 测试。
什么时候进行集成测试?
(1)由若干单元或模块要组成一个构件; (2)由若干构件组成为一个工件; (3)由若干工件组成为一个系统。集成测试被定义为
在单元测试与系统测试之间级别的测试。
0C202 SoChfatwptear 5re
0C202 SoChfatwptear 5re
5-33
Testing
自底向上集成 (2/3)
步骤:
1. 低层模块组合成能够实现软件特定子功能的 造件(builds),有时也称为簇(clusters)。
2. 编写测试装置(供测试用的控制程序)来协调测 试用例的输入输出。
3. 对簇进行测试。 4. 撤去测试装置,沿着程序结构的层次向上对
初始阶段所有的模块可能只是提供部分功能,这 可以用宽度优先技术进行测试。
当模块越来越精化,模块的功能也越来越全,可 以对一个模块进行深度优先测试而同时所有的模 块进行宽度优先测试。
0C202 SoChfatwptear 5re
5-30
Testing
自顶向下集成
集成过程:

最新Unit-Testing-单元测试详解PPT课件

最新Unit-Testing-单元测试详解PPT课件
黑盒:什么进去,出来什么?白盒:什么进去,如何演变生 成,出来什么?
白盒测试用例设计方法
• 白盒测试主要是检查程序的内部结构、逻辑、循环和路径。 • 其常用测试用例设计方法有:逻辑覆盖和基本路径测试。(白盒测试的测试方
法很多:有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、 基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。)
谁来做单元测试
谁来做单元测试
执行者:
开发人员或者白盒测试人员
维护一个专门单元测试的测试团队成本太高,或者是有某些专门白盒测试人员,让其去熟 悉开发架构和业务实现方式进行测试开发,设计测试用例和编写测试代码进行单元测试也 得不偿失。
无论由哪个部门做单元测试,都要面对一些问题,但开发部门所面对的问题可以借助工具 来解决,而由测试部门进行单元测试,要么无法真正实施,要么代价昂贵。
语句覆盖:
•原理:如果语句中有错误,仅靠观察不执行可能发现不了。 •在测试时,首先设计足够多的测试用例,然后运行被测程序,使程序中的每个可执行语句 至少执行一次! •语句覆盖率:已执行的可执行语句/程序中可执行语句总数*100%。 •复杂的程序不可能达到语句的完全覆盖! •语句覆盖率越高越好!
Sample
• 单元测试针对程序单元非一个独立可运行的程序,因此,在考虑测试模块时, 同时要考虑到它和外界其他模块的联系,用一些辅助模块去模拟与被测模块 关联。这些模块分为两种:驱动模块和桩模块。
桩和驱动模块由来
• 单元测试针对程序单元非一个独立可运行的程序,因此, 在考虑测试模块时,同时要考虑到它和外界其他模块的联 系,用一些辅助模块去模拟与被测模块关联。这些模块分
那么怎样才能测试B模块呢?需要做: 1、写两个模块Sd和Se分别代替D模块和E模块(函数名、返回值、传递的参数相 同),这样B模块就可以通过编译了。Sd模块和Se模块就是桩模块。 2、写一个模块Da用来代替A模块,里面包含main函数,可以在main函数中调 用B模块,让B模块运行起来。Da模块就是驱动模块。

前庭功能检查PPT课件

前庭功能检查PPT课件

视觉
本体觉 前庭系统 脑干网状结构 大脑皮质 感觉区
空间位象觉传导通路
临床表现
• 根据病变部位及眩晕性质不同分
眼性眩晕 真性眩晕 眩 晕 假性眩晕 姿态感觉性眩晕 前庭系统性眩晕 周围性眩晕
中枢性眩晕
• 眩晕可分为假性和真性。 • 假性眩晕也叫脑性眩晕或全身性眩晕,多由发 热、高血压、低血压、贫血、神经官能症引起, 多为持续性,患者只感到头昏眼花、眼前发黑、 头重脚轻等异常感觉,而无自身或周围景物旋 转感。 • 真性眩晕可分为眼性眩晕、姿态感觉性眩晕、 前庭系统性眩晕。眩晕可理解为头晕加自身或 视物旋转。
4.平稳跟踪(Smoothpursuit): • 是平稳跟随一运动目标,而无扫视的一种 眼动反应。分为预测性跟踪,产生于额叶 皮层;随机性跟踪,产生于枕、顶、颞叶, 两种跟踪通路汇合为一于脑干。 • 临床上除定性的分为四型外,定量分为三 类。即①对称、准确;②中度受损;③跟踪 缺失。
5.视动眼震(Optokineticnystagmus,OKN)和 视动后眼震(Optokineticafternystagmus,OKAN): • OKN是跟踪视野活动目标诱发的眼动反 应,在视动刺激消失后持续出现OKN是 OKAN。 • OKN主要产生于皮层神经结构,而OKAN 产生于脑干。
6.固视(Fixation): • 是一种主动过程,尽力使眼保持与头相对不动的 眼动活动。它可减弱自发眼震强度,抑制扫视。 固视检查是用于检测凝视诱发性眼震、方波急 跳和反跳眼震。 • 临床上主要用固视试验检测视觉对前庭性眼震 的抑制水平,以此鉴别前庭系统功能障碍的水平。 • 有五种异常固视:①固视抑制受损;②凝视诱发 眼震;③反跳眼震;④先天性眼震;⑤方波急跳。 • 做前庭诱发性眼震固视作用时,要计算固视抑制 指数FI。FI低示前庭外周性眼震,高示前庭中枢 性障碍。 • FI=SPV睁眼暗室/SPV注视目标灯

GTest使用手册

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单元测试方法

gtest单元测试方法

gtest单元测试方法gtest单元测试方法1. 什么是gtest单元测试方法gtest单元测试方法是指使用Google Test(简称gtest)框架进行软件单元测试的一种方法。

gtest是一个开源的C++单元测试框架,它提供了丰富的断言和测试工具,可以帮助开发者编写可靠的、易于维护的单元测试。

2. 使用gtest编写单元测试方法的步骤下面是使用gtest编写单元测试方法的步骤:1.安装gtest框架:首先需要将gtest框架下载到本地,并进行安装和配置。

2.编写测试用例:根据需要,编写需要测试的代码和相应的测试用例,在测试用例中调用待测试代码,并使用gtest的断言进行验证。

3.构建和运行测试:通过编译器构建测试代码,并执行生成的可执行文件,查看测试结果。

4.分析结果:根据测试结果,进行相应的修改和优化。

3. 测试用例的编写测试用例是指对待测试代码的某个功能进行测试的一组测试方法。

在gtest中,测试用例是由宏定义的方式进行定义的,下面是一个测试用例的示例:TEST(TestCaseName, TestName) {// 在这里编写测试代码// 调用待测试代码并使用断言进行验证EXPECT_EQ(4, add(2, 2));}•TEST是一个宏定义,用于定义一个测试用例。

TestCaseName 是测试用例的名称,TestName是具体的测试方法的名称。

•在测试用例中,可以编写测试代码,并调用待测试的代码。

使用EXPECT_*系列的断言检查测试结果,如EXPECT_EQ用于判断两个值是否相等。

4. 编译和运行测试使用gtest编写的测试代码,需要通过编译器进行构建,并执行生成的可执行文件进行测试。

下面是使用命令行进行编译和运行的示例:1.编译测试代码:使用编译器将测试代码编译为可执行文件。

$ g++ -o test -lgtest -lgtest_main2.运行测试:执行生成的可执行文件进行测试。

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!后⾯想到其他的再继续进⾏补充~。

单元测试PPT课件

单元测试PPT课件
进行测试。 • 在结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。 • 在象C++这样的面向对象的语言中, 要进行测试的基本单元是类。 • 对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的
级别上进行单元测试。 • 单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被
集成测试关注的重点
• 在把各个模块连接起来时,穿越模块接口的数据 是否会丢失。
• 各个子功能组合起来,能否达到预期要求的父功 能。
• 一个模块的功能是否会对另一个模块的功能产生 不利的影响。
• 全局数据结构是否有问题,会不会被异常修改。 • 单个模块的误差积累起来,是否会放大,从而达
到不可以接受的程度。
Click to edit title style
Text in here
Assert.AreEqual(sum,3); }
单元测试
步骤5 使用nunit进行测试 工程---属性---调试---启动外部程序
步骤6
编译运行测试
集成测试
集成测试
集成测试:也叫做组装测试、联合 测试、子系统测试和部件测试。
在单元测试的基础上,将所有模块 按照概要设计要求组装成为子系统或 系统,进行集成测试。
单元测试需要从程序的内部结构出发设 计测试用例。多个模块可以平行地独立进行 单元测试。
单元测试
public void AddTwoNumbers() { int a=1; int b=2; int sum=a+b; Assert.AreEqual(sum,3); }
public void multiplyTwoNumbers() { int a=1; int b=2; int product=a*b; Assert.AreEqual(2,product); }

软件测试——模块(单元)测试 ppt课件

软件测试——模块(单元)测试  ppt课件
使用自动化测试工具可以减少测试过程中的劳动,如流程分 析工具等。
执行测试时,应该查找程序的副作用,即模块是否执行了不 该执行的操作。
程序员不应测试自己编写的模块,最好交换测试;编写调用 模块的程序员是测试被调模块的最佳人选。
模块测试的目的不是证明模块能够正确地运行,而是证明模 块中存在着错误。
增量的序列有多种
可能,例如:
ABFJDICGEKHL,
J
加入I后如图
A stubC
ppt课件
stuDbD
stubH
I
10
自顶向下的增量测试中的桩模块
A
B
C
D
显示跟踪信息 显示传递信息 返回一个值
根据输入返回 一个值
ppt课件
11
自底向上的增量测试
第一步是测试E,J,G, K,L
和I中的部分或全部模块,
ppt课件
8
例子
B
E
F
J
A
图中共有12个模块A
到L
模块I包含IO的写操作
C
D 模块J包含IO的读操作
G
H
I
K
L
ppt课件
9
自顶向下的增量测试
首先测试模块A,
需要设计代表模块
B,C,D的桩模块;
如图
接着用实际模块代
stuBbB
替桩模块,如B,
并添加B的桩模块;
如图
stubE stuFbF
ppt课件
15
单元测试的通过准则
命名符合规则 控制流程正确; 变量存取无误差; 所有软件单元达到质量度量指标; 功能与设计说明一致; 性能达到软件设计指标; 覆盖测试达到规定的覆盖率; 对发现的问题已进行修改并通过回归测试。

gtest单元测试原理

gtest单元测试原理

gtest(Google Test)是一个用于C++的开源单元测试框架,它由Google开发并维护。

gtest的原理是基于xUnit测试框架的原理,即将被测试的代码分解为多个独立的单元,对每个单元进行测试并验证其行为是否符合预期。

gtest的测试原理主要包括以下几个方面:
1. 测试用例(Test Case):gtest将测试代码组织成一个个测试用例,每个测试用例包含一个或多个测试点(Test Point)。

测试用例是对被测试代码的一个逻辑单元进行测试的最小单位。

2. 测试点(Test Point):测试点是对被测试代码的一个具体功能进行测试的最小单位。

每个测试点都是一个独立的函数,用于验证被测试代码的某个方面是否符合预期。

3. 断言(Assertion):在每个测试点中,使用断言来验证被测试代码的行为是否符合预期。

断言是一个条件表达式,如果条件为真,则测试通过;如果条件为假,则测试失败。

4. 测试夹具(Test Fixture):测试夹具是一组用于测试的对象或数据,它提供了测试环境和测试数据,用于支持测试点的执行。

测试夹具可以在每个测试点之前进行设置,以确保每个测试点都在相同的环境下执行。

5. 测试运行器(Test Runner):测试运行器是gtest的核心组件,它负责加载和执行测试用例。

测试运行器可以自动发现测试用例,并按照一定的顺序执行测试点。

在测试运行器中,可以配置测试参数、输出测试结果等。

通过使用gtest,开发人员可以方便地编写和执行单元测试,以验证被测试代码的正确性和稳定性。

gtest提供了丰富的断言和测试夹具,可以满足各种测试需求,并且具有良好的可扩展性和灵活性。

gtest mock 模板方法

gtest mock 模板方法

gtest是一个流行的C++测试框架,它支持丰富的断言和测试结果统计。

而在进行单元测试时,我们经常会遇到需要模拟一些对象或者函数的场景,以便更好地进行测试。

这时,gtest的mock功能就派上了用场。

在本文中,我们将重点介绍gtest的mock功能中的模板方法,包括其基本用法、高级技巧以及一些注意事项。

1. 概述在讲解模板方法之前,先来简单介绍一下gtest的mock功能。

gtest 的mock功能能够帮助我们模拟对象或者函数的行为,从而让我们能够更加方便地进行测试。

在实际的项目开发中,很多时候我们需要对一些外部依赖进行测试,而这些外部依赖可能并不容易进行集成测试,这时我们就可以利用mock功能,模拟这些外部依赖的行为,从而进行单元测试。

2. 基本用法我们需要在测试用例中包含相关的头文件:```cpp#include <gmock/gmock.h>```定义一个mock类,该类需要继承自需要模拟的类,并且在该类中使用MOCK_METHOD宏定义需要模拟的方法,如下所示:```cppclass MockFoo : public Foo {public:MOCK_METHOD(int, GetResult, (int, int), (override));};```在上面的代码中,我们定义了一个名为MockFoo的mock类,该类继承自Foo,并且使用MOCK_METHOD宏定义了一个名为GetResult的方法,该方法接受两个int类型的参数,并返回int类型的值。

我们可以在测试用例中使用该mock类,模拟GetResult方法的行为,比如设置其返回值、设定其调用次数等。

3. 高级技巧除了基本用法外,gtest的mock功能还支持一些高级的技巧,比如参数匹配、调用顺序、自定义动作等。

在实际的测试过程中,我们可能会遇到需要对参数进行特定匹配的情况,这时我们可以使用Matcher 来进行参数匹配,比如:```cppusing ::testing::_;using ::testing::Gt;using ::testing::Return;EXPECT_CALL(mockFoo, GetResult(Gt(5), _)).WillOnce(Return(1));```在上面的代码中,我们使用Gt(5)来指定第一个参数大于5,然后将GetResult方法的返回值设定为1。

单元测试框架GTest

单元测试框架GTest

• 单元测试代码: • Factorial_
• 被测试的源代码 • 单元测试源代码 • Gtest框架代码/库
单元测试是什么(讨论)
• • • •
什么是单元,什么叫可测单元? 什么是模块,模块由什么组成? 什么是测试实例,测试实例由什么组成? 什么是测试用例,测试用例由什么组成?
class FooTest: public testing::Test { public: virtual void SetUp() {}; virtual void TearDown() {}; static void SetUpTestCase() {}; static void TearDownTestCase() {}; private: static type variables; } TEST_F(FooTest, Zero);
class FooTest: public testing::Test { public: virtual void SetUp() {}; virtual void TearDown() {}; static void SetUpTestCase() {}; static void TearDownTestCase() {}; private: static type variables; } TEST_F(FooTest, Zero); class GlobalEvent: public testing::Environment { public: virtual void SetUp() {} virtual void TearDown() {} }; ::testing::AddGlobalTestEnvironment();
布尔断言 布尔断言 布尔断言 AAA-JJJ 测试 布尔断言 AAA-JJJ 测试
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
只有当返回值为true时,死亡测试案例才算通过。
VS2008下简单实现示例
如果程序正常退出并且退出码与exit_code相同则返回 true
Windows 下正规表达式风格: Simple风格:GTEST_USES_SIMPLE_RE=1(预处理处添加)
1.4 Googletest 环境搭建
搭建步骤: (1) 设置gtest头文件路径 (2) 设置gtest.lib路径
1.5 Googletest 使用
(1)创建单元测试工程
RUN_ALL_TESTS()宏功能: 1.Saves the state of all Google Test flags. 2.Creates a test fixture object for the first test. 3.Initializes it via SetUp(). 4.Runs the test on the fixture object. 5.Cleans up the fixture via TearDown(). 6.Deletes the fixture. 7.Restores the state of all Google Test flags. 8.Repeats the above steps for the next test, until all tests have run.
TestSuite事件
需要实现一个类,继承testing::Test,然后实现两个静态方法 1. SetUpTestCase() 方法在第一个TestCase之前执行 2. TearDownTestCase() 方法在最后一个TestCase之后执行
TestCase事件
TestCase事件发生在每个TestCase执行前后 1. SetUp()方法在每个TestCase执行前执行 2. TearDown()方法在每个TestCase执行后执行
创建
测试 用例类
测试用 例对象
建立 执行 验证 拆卸
夹具
执行
SUT
执行
testMethod_n
每个测试依次执行的4个不同阶段: 1、建立测试夹具(Fixture) ; 2、与SUT(System Under Test)交互; 3、验证结果; 4、拆卸测试Fixture,返回初始状态。
1.3 Googletest 特性
注意事项: 1. 不要在死亡测试里释放内存。 2. 在父进程里再次释放内存。 3. 不要在程序中使用内存堆检查。
环境要求:Linux, Windows (requires MSVC 8.0 or above), Cygwin, and Mac (the latter three are supported since v1.3.0).
1.3.3 参数化测试
当被测函数需要传入不同的值时,可以考虑Gtest提供 的参数化IATE_TEST_CASE_P(param1,param2,param3) param1:任意取; param2:测试案例的名称; param3:参数生成器 (eg:testing::Values());
EXPECT_DEATH(statement, regex); 1. statement是被测试的代码语句 2. regex是一个正则表达式,用来匹
配异常时在stderr中输出的内容
VS2008下简单实现示例
EXPECT_EXIT(statement, predicate, regex) 1. statement是被测试的代码语句 2. predicate 在这里必须是一个委托,接收int型参数,并返回bool。
1.1 Googletest 背景
Googletest是Googletest针对C++测试的开源项目,跨 平台(Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian)。
基于xUnit框架,有丰富的断言,自定义断言,事件机 制,death 测试,参数化测试,XML测试报告等。
Googletest框架和单元测试
杭州 2011.10.12
内容
Googletest 框架 单元测试(Unit Testing)
Googletest 框架
Googletest 背景 xUnit简介 Googletest 特性 Googletest 环境搭建 Googletest 使用
应用案例: Chromium projects (谷歌浏览器) LLVM (Low Level Virtual Machine) ProtocalBuffers (类似XML数据描述语言)
1.2 xUnit简介
测试运行器 套件
创建 testMethod_1
测试 运行 创建 套件
对象
testMethod_n
1.3.4 运行参数
在运行Gtest时,Gtest提供了一系列的参数可以使我们 对案例的执行进行有效的控制。
Gtest工程产生exe文件图
运行输出案例表参数图示
参数列表
测试案例集合参数
测试案例输出参数
测试案例异常处理参数
1.3.5 death测试
在测试过程中,对于可能导致程序崩溃的输入,我们可 以检查程序是否按预期的方式崩溃,验证崩溃结果。
1.3.2 事件机制
Gtest事件机制分类:
全局:发生在所有案例执行前后 TestSuite:案例中所有案例执行前后 TestCase: 单个案例前后
全局事件
要实现全局事件,必须写一个类,继承testing::Environment类,实 现里面的SetUp和TearDown方法。 1. SetUp()方法在所有案例执行前执行 2. TearDown()方法在所有案例执行后执行
断 言 事件机制 参数化测试 运行参数 death测试
1.3.1 断 言
断言宏分类: (1) ASSERT_*系列:检查点失败时,推出当前函数 (2) EXPECT_*系列:检查点失败时,继续往下执行
布尔值检查
数值型检查
字符串检查 浮点型检查
当断言检查出错时输出的信息并不能很好的帮助你还原当时出错的状况时, 可以使用“<<” 操作符输出指定内容帮助分析出错原因。
相关文档
最新文档