gtest 三种事件机制
前言:
1.首先说明gtest中事件的结构层次:

测试程序:一个测试程序只有一个main函数,也可以说是一个可执行程序是一个测试程序。该级别的事件机制会在程序的开始和结束执行。
测试套件:代表一个测试用例的集合体,该级别的事件机制会在整体的测试案例开始可结束执行。
测试用例:该级别的事件机制会在每个测试用例开始和结束都执行。
gtest中的事件机制是指在测试前和测试后提供给用户自行添加操作的机制,而且次机制也可用让同一测试套件下的测试用例共享数据。
一、全局的事件机制(针对整个测试程序)
实现全局的事件机制,需要创建一个自己的类,然后继承testing::Environment类,然后分别实现成员函数SetUp()和TearDown(),同时在main函数内进行调用,即"testing::AddGlobalTestEnvironment(new MyEnvironment);",通过调用函数我们可以添加多个全局的事件机制。
SetUp()函数是在所有测试开始前执行。
TearDown()函数是在所有测试结束后执行。
示例:
/***********************************************
Filename : test.cpp
Author :
Description :
Create Data : 2018-10-21 00:42:34
Modfiy History : 2018-10-21 00:42:34
***********************************************/
#include <iostream>
#include <gtest/gtest.h>
using namespace std;
class MyEnvironment0 : public testing::Environment
{
public:
virtual void SetUp()
{
cout << "Global event0 : start" << endl;
}
virtual void TearDown()
{
cout << "Global event0 : end" << endl;
}
};
class MyEnvironment1 : public testing::Environment
{
public:
virtual void SetUp()
{
cout << "Global event1 : start" << endl;
}
virtual void TearDown()
{
cout << "Global event1 : end" << endl;
}
};
TEST(GlobalTest0, test0)
{
EXPECT_EQ(, );
};
TEST(GlobalTest0, test1)
{
EXPECT_EQ(, );
};
TEST(GlobalTest1, test0)
{
EXPECT_EQ(, );
};
int main(int argc, char *argv[])
{
testing::AddGlobalTestEnvironment(new MyEnvironment0);
testing::AddGlobalTestEnvironment(new MyEnvironment1);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
编译命令及结果:

二、局部的事件机制(针对一个个测试套件)
测试套件的事件机制我们同样需要去创建一个类,继承testing::Test,实现两个静态函数SetUpTestCase()和TearDownTestCase(),测试套件的事件机制不需要像全局事件机制一样在main注册,而是需要将我们平时使用的TEST宏改为TEST_F宏。
SetUpTestCase()函数是在测试套件第一个测试用例开始前执行。
TearDownTestCase()函数是在测试套件最后一个测试用例结束后执行。
需要注意TEST_F的第一个参数使我们创建的类名,也就是当前测试套件的名称。
示例:
/***********************************************
Filename : test.cpp
Author :
Description :
Create Data : 2018-10-21 01:05:17
Modfiy History : 2018-10-21 01:05:17
***********************************************/
#include <iostream>
#include <gtest/gtest.h>
using namespace std;
class MyTestSuite0 : public testing::Test
{
protected:
static void SetUpTestSuite()
{
cout << "TestSuite event0 : start" << endl;
}
static void TearDownTestSuite()
{
cout << "TestSuite event0 : end" << endl;
}
};
class MyTestSuite1 : public testing::Test
{
protected:
static void SetUpTestSuite()
{
cout << "TestSuite event1 : start" << endl;
}
static void TearDownTestSuite()
{
cout << "TestSuite event1 : end" << endl;
}
};
TEST_F(MyTestSuite0, test0)
{
EXPECT_EQ(, );
}
TEST_F(MyTestSuite1, test0)
{
EXPECT_EQ(, );
}
TEST_F(MyTestSuite0, test1)
{
EXPECT_EQ(, );
}
TEST_F(MyTestSuite1, test1)
{
EXPECT_EQ(, );
}
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
编译命令及结果:

三、个体的事件机制(针对一个个测试用例)
测试用例的事件机制的创建和测试套件的基本一样,不同地方在于测试用例实现的两个函数分别是SetUp()和TearDown(),这两个函数不是静态函数了。
SetUp()函数是在一个测试用例的开始前执行。
TearDown()函数是在一个测试用例的结束后执行。
示例:
/***********************************************
Filename : test.cpp
Author :
Description :
Create Data : 2018-10-21 01:23:12
Modfiy History : 2018-10-21 01:23:12
***********************************************/
#include <iostream>
#include <gtest/gtest.h>
using namespace std;
class MyTestCase0 : public testing::Test
{
protected:
virtual void SetUp()
{
cout << "TestCase event0 : start" << endl;
}
virtual void TearDown()
{
cout << "TestCase event0 : end" << endl;
}
};
class MyTestCase1 : public testing::Test
{
protected:
virtual void SetUp()
{
cout << "TestCase event1 : start" << endl;
}
virtual void TearDown()
{
cout << "TestCase event1 : end" << endl;
}
};
TEST_F(MyTestCase0, test0)
{
EXPECT_EQ(, );
}
TEST_F(MyTestCase0, test1)
{
EXPECT_EQ(, );
}
TEST_F(MyTestCase1, test0)
{
EXPECT_EQ(, );
}
TEST_F(MyTestCase1, test1)
{
EXPECT_EQ(, );
}
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
编译命令及结果:

总结:
gtest的三种事件机制总的来说还是简单的,而且也比较灵活,通过上面的例子也能看出我们可以在事件机制中实现一些资源共享,使我们的测试更加灵活。
gtest 三种事件机制的更多相关文章
- 【css笔记】css中的盒模型和三种定位机制(固定定位,绝对定位,浮动)
html页面上的元素都可以看成是框组成的,框通过三种定位机制排列在一起就过程了我们看到的页面.而框就是盒模型. 盒模型 1.页面上的每个元素可以看成一个矩形框,每个框由元素的内容,内边距,边框和外边距 ...
- Oracle基础学习2--Oracle登录与三种验证机制
首先,Oracle安装完毕有三个默认用户 Ø Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 Ø System:数据库管理员,password为manage ...
- 请写出JavaScript中常用的三种事件。
请写出JavaScript中常用的三种事件. 解答: onclick,onblur,onChange
- Oracle数据库的三种验证机制
关于超级管理员登陆不需要密码因为: 数据库的三种验证机制: 操作系统验证(具有sysdba和sysopera的用户) 密码文件验证(具有sysdba和sysopera的用户) 数据库验证(普通用户) ...
- NET下三种缓存机制(Winform里面的缓存使用 )
原文(http://www.cnblogs.com/wuhuacong/p/3526335.html)非常感谢伍华聪作者的分享! 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度 ...
- java中存在三种调用机制
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消息或事件的机制 ...
- jQuery三种事件绑定方式.bind(),.live(),.delegate()
.bind(), .live(), 和 .delegate()之间的区别并不明显.但是理解它们的不同之处有助于写出更简洁的代码,并防止我们的交互程序中出现没有预料到的bug. 基础 DOM树 首先,图 ...
- python三种回收机制
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...
- CSS三种定位机制
标准文档流 块级元素撑满整个页面div,ul,li,dl,dt,p 行级元素可以一行显示多个span,strong,img,input大部分 一般不设置盒子的高度,另其自动调整 margin属性的au ...
随机推荐
- erlang并发编程(二)
补充-------erlang并发编程 Pid =spawn(fun()-> do_sth() end). 进程监视: Ref = monitor(process, Pid)靠抛异常来终结进程 ...
- JAVA中接口与抛出异常的相关知识
1.接口概念:接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成. 类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只 ...
- C++算法之大数加法计算的代码
如下代码段是关于C++算法之大数加法计算的代码,希望对大家有用. { int length; int index; int smaller; int prefix = 0; if(NULL == sr ...
- linux创建新用户,可以使用sudo无密码操作
useradd -d /home/aiuap -m aiuappasswd aiuapXXXXXXXgroupadd aiuapchown -R aiuap:aiuap /home/aiuap chm ...
- hadoop管理命令
-help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs -ls hdfs://hadoop-server01:9000/ 备注:这些参数中,所有的hdfs ...
- 修改hbuilder背景颜色为护眼模式
复制以下代码,保存为.tmTheme文件导入HBuilder <?xml version="1.0" encoding="UTF-8"?> < ...
- OO第二单元的总结
三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了.在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业.当然这次 ...
- ubuntu的安装与vim(部分)文件的配置
Ubuntu的安装与vim相关的配置 虚拟机环境的安装(先说说虚拟机的安装步骤把) 对于安装ubuntu来讲不是很难掌握,但是在Linux系统虚拟机下提供了很多便利的手段,而要配置一个顺手的虚拟机环境 ...
- 安装oracle数据库的操作步骤
1. vnc启动之后,进入数据库安装包所在目录,此处是/home/DB/backup/database 2. 输入命令 ./runInstaller 3. 弹出linux图形化界面,同时弹出Oracl ...
- 给大家介绍一个实用的RN神器DeviceEventEmitter
再不出来更新一下自己都感觉不到自己还存在了,这个监听最常用的地方莫过于单选和全选了,,当然远不止这个了,大家可以自己去多尝试几波,举个栗子 A组件全选所在 //全选 choose(bool){ //选 ...