【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

原文地址:http://www.cnblogs.com/coderzh/archive/2009/04/06/1430396.html

一、前言

gtest提供了多种事件机制,非常方便我们在案例之前或之后做一些操作。总结一下gtest的事件一共有3种:

1. 全局的,所有案例执行前后。

2. TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。

3. TestCae级别的,每个TestCase前后。

二、全局事件

要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。

1. SetUp()方法在所有案例执行前执行

2. TearDown()方法在所有案例执行后执行

class  FooEnvironment :  public  testing::Environment
{
public :
    
virtual   void  SetUp()
    {
        std::cout 
<<   " Foo FooEnvironment SetUP "   <<  std::endl;
    }
    
virtual   void  TearDown()
    {
        std::cout 
<<   " Foo FooEnvironment TearDown "   <<  std::endl;
    }
};

 

当然,这样还不够,我们还需要告诉gtest添加这个全局事件,我们需要在main函数中通过testing::AddGlobalTestEnvironment方法将事件挂进来,也就是说,我们可以写很多个这样的类,然后将他们的事件都挂上去。

int  _tmain( int  argc, _TCHAR *  argv[])
{
    testing::AddGlobalTestEnvironment(
new  FooEnvironment);
    testing::InitGoogleTest(
& argc, argv);
    
return  RUN_ALL_TESTS();
}

 

三、TestSuite事件

我们需要写一个类,继承testing::Test,然后实现两个静态方法

1. SetUpTestCase() 方法在第一个TestCase之前执行

2.
TearDownTestCase() 方法在最后一个TestCase之后执行

class  FooTest :  public  testing::Test {
 
protected :
  
static   void  SetUpTestCase() {
    shared_resource_ 
=   new   ;
  }
  
static   void  TearDownTestCase() {
    delete shared_resource_;
    shared_resource_ 
=  NULL;
  }
  
//  Some expensive resource shared by all tests.
   static  T *  shared_resource_;
};
在编写测试案例时,我们需要使用TEST_F这个宏,第一个参数必须是我们上面类的名字,代表一个TestSuite。

TEST_F(FooTest, Test1)
 {
    
//  you can refer to shared_resource here 
}
TEST_F(FooTest, Test2)
 {
    
//  you can refer to shared_resource here 
}

 

四、TestCase事件

TestCase事件是挂在每个案例执行前后的,实现方式和上面的几乎一样,不过需要实现的是SetUp方法和TearDown方法:

1. SetUp()方法在每个TestCase之前执行

2. TearDown()方法在每个TestCase之后执行

class  FooCalcTest: public  testing::Test
{
protected :
    
virtual   void  SetUp()
    {
        m_foo.Init();
    }
    
virtual   void  TearDown()
    {
        m_foo.Finalize();
    }

    FooCalc m_foo;
};

TEST_F(FooCalcTest, HandleNoneZeroInput)
{
    EXPECT_EQ(
4 , m_foo.Calc( 12 16 ));
}

TEST_F(FooCalcTest, HandleNoneZeroInput_Error)
{
    EXPECT_EQ(
5 , m_foo.Calc( 12 16 ));
}

 

五、总结

gtest提供的这三种事件机制还是非常的简单和灵活的。同时,通过继承Test类,使用TEST_F宏,我们可以在案例之间共享一些通用方法,共享资源。使得我们的案例更加的简洁,清晰。

GoogleTest : 测试框架单元测试 gtest、gmock:期望测试、TESTTEST_F、EXPECT_CALL、测试环境 阅读详情

相关推荐

人工智能简史第五章:第三次浪潮期-2006年以后

第三次人工智能浪潮兴起的标志可能要数2006年杰弗里·辛顿(Geoffrey Hinton)等人提出的深度学习,或者说Hinton等人吹响了这次浪潮的号角。与之前最大的不同,这次引领浪潮冲锋的是企业:塞巴斯蒂安·特龙(Sebastian Thrun)在谷歌领导了自动驾驶汽车项目;IBM 的沃森(Watson)于 2011 年在《危险边缘》(Jeopardy)中战胜人类、获得冠军;苹果在 2011 年推出了自然语言问答工具 Siri 等;2016年谷歌旗下DeepMind公司推出的阿尔法围棋(AlphaGo)

ChatGPT_X的博客 2857

C++11 模板元编程-TLP测试框架-2.setup,teardown

载:https://www.jianshu.com/p/b56d59f77d53 1.setup Fixture内的所有测试用例,可以共享一个setup,用于执行相同的前置准备动作; 每个testcase现在是一个类,那么我们想到在fixture里面为所有testcase类提供一个共同的父类, #define SETUP() struct TlpTestSetup #define T...

Hu_yilang的博客 432

GoogleTesttest

gtest中的测试宏TEST,TEST_F, TEST_P, TYPED_TEST, TYPED_TEST_SUITE_P, TYPED_TEST_P, FRIEND_TEST, SCOPED_TRACE, GTEST_SKIP和gtes中定义的类和函数归纳总结

u010378559的博客 846

C++ 语言的单元测试与代码覆盖率

点击蓝字关注我们来源于网络,侵删前言测试是软件开发过程中一个必须的环节,测试确保软件的质量符合预期。对于工程师自己来说,单元测试也是提升自信心的一种方式。直接交付有经过测试的代码是不太好的,因为这很可能会浪费整个团队的时间,在一些原本早期就可以发现的问题上。而单元测试,就是发现问题一个很重要的环节。本文以C++语言为基础,讲解如何进行单元测试并生成测试报告。在工具上,我们会使用下面这些:GCCC...

轻松学C语言 1695

玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

当然,这样还不够,我们还需要告诉gtest添加这个全局事件,我们需要在main函数中通过testing::AddGlobalTestEnvironment方法将事件挂进来,也就是说,我们可以很多个这样的类,然后将他们的事件都挂上去。要实现全局事件,必须一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。在编测试案例时,我们需要使用TEST_F这个宏,第一个参数必须是我们上面类的名字,代表一个TestSuite。1. 全局的,所有案例执行前后。

梦心之魂的博客 1280

2006年我的常用工具列表

数据库管理:PLSQL Developer:oracle 开发者必备工具Toad for Oracle 9.0: oracle dba必备工具Navicat MySQL:操作mysql 很简单的工具系统管理:Xmanager Enterprise:登录aix,linux x window的工具SecureCRT 5.2:支持ssh, telnet等;SecureFX 4.0:支持sftp,ft

Ari的专栏 2076

gbt20518-2006_2006年最新文章-最佳

gbt20518-2006We're getting closer and closer to 2010, and it's tripping me out. This is the last post of 2006. Here's some of the things I felt good about this year in no particular order. Also, here'...

344

Google所有服务列表(2006年10月27日版)

  今天由于搜集Google相关资料的关系,对互联网上的Google服务列表进行了整理,以下列出的是我于2006年10月25日整理的Google服务列表,应该是现在互联网上最全的。(已更新至2006年10月27日版) 服务名称

魏泉的专栏 8603

Delphi7到Delphi2006控件兼容性列表

每一代Delphi产品都有可能新增或者删除控件,下面是一个主要控件的对比列表摘自http://www.dragonsoftru.com/index.php?go=d7d2006 From Delphi 7 to Developer Studio 2006 - Comprehensive components list ComponentD7 VCL32CB6 W32D2005 VCL32D2005

Compass♂ 2868

SPEC CPU 2006跑分

通过上述表格和公式,你可以计算 SPEC CPU 2006 的分数,同时了解各测试程序的参考时间和其模拟的实际应用场景。运行所有 SPEC CPU 2006 基准测试可能需要数小时甚至数天,具体时间依赖于测试系统的性能。- **Reference Time**:SPEC 官方提供的参考时间。- **Measured Time**:实际运行基准测试程序所需的时间。- **Reference Time**:9650 秒。- **Measured Time**:2000 秒。Perl 脚本语言解释器。

数字IC那些事儿的博客 1865

2006年100个最好的软件

全文载, 源网址: http://blog.163.com/tom_jims/blog/static/80774732007043432466/在2000和2003年非常成功的推出了安全工具调查后,Insecure.Org 非常高兴为大家带来2006年度的安全工具调查。我-Fyodor对nmap-hackers 邮件列表中的用户进行了调查,让大家来分享他们最喜欢用的工具,结果有3243名用户提供

LoocalVinci的专栏 3184

木马雪崩到APT的关联与必然——对2006年一次技术报告的反思

木马雪崩到APT的关联与必然 ——对2006年一次技术报告的反思 安天实验室 江海客 注:本文刊发于2013年《中国信息安全》1月刊,是笔者在第一届全国网络与信息安全防护峰会(XDEF,武汉大学,2012)上的演讲整理稿,刊发时有删节。 温故.2006 ——这是一个充满预言、谶语和诅咒的年代,这是一个人人皆神、诸佛俱死的年代,我自己也曾因某个只言片语的应验,找到先知先觉的感觉,但推敲

江海客每月安全天下事 (全本) 1万+

2006年100款最佳安全工具谱

 译者:天天安全网 tulip在2000和2003年非常成功的推出了安全工具调查后,Insecure.Org 非常高兴为大家带来2006年度的安全工具调查。我-Fyodor对nmap-hackers 邮件列表中的用户进行了调查,让大家来分享他们最喜欢用的工具,结果有3243名用户提供了反馈信息。我从反馈信息中选取了大家最喜欢的前100种工具,并将它们进行了分类。建议安全界人士仔细阅读这份列表,并对

软体疯子专栏 2708

hdu2006

** hdu2006:求奇数的乘积 ** Problem Description 给你n个整数,求他们中所有奇数的乘积。 Input 输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。 Output 输出每组数中的所有奇数的乘积,对于测试实例,输出一行。 Sample Input 3 1 2 3 4 2...

weixin_45802810的博客 230

2006年中国软件收入规模前100家企业名单

2006年中国软件收入规模前100家企业名单                                                 单位:万元 

老汉--小庙和尚 2779

JBuilder2006下载及破解

   JBuilder2006下载地址:ftp://ftpd.borland.com/download/jbuilder/JBuilder_2006/Enterprise/jb2006_enttrialdl_win.zip详细版本列表:http://www.borland.com/downloads/download_jbuilder.html 破解方法:

summer_lilac的专栏 1493

今年(2006)添加的第一首歌

今年添加的第一首歌,先不弄到播放列表....播放列表积累中http://202.104.237.172/file01/9363/3.wma我会好好的 - 王心凌>>>>>>>>>>>Twohttp://wma.139mtv.com/twins/27/2.wma幼稚园 - twins http://wma.2ting.net/G_music/cn/gt2/z/zyhan/03/2

唯一谣|Airs|走尽天涯路|极地阳光 1476

jbuider2006 学习

jbuider2006破解     破解方法: 1,安装Jbuilder2006. 2、将破解文件包Crack.zip中的*.JAR文件(有两个)复制到JBuilder2006\lib目录中,将*.SLIP复制到JBuilder2006\(即安装好后的根目录),再将*.SLIP放至JBuilder2006\license下 3、更新JDK核心: 从网络上下载最新

kyng1988的专栏 740

P1059 [NOIP2006 普及组] 明明的随机数Python

P1059 [NOIP2006 普及组] 明明的随机数Python

weixin_43843099的博客 737
上一篇: 【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言
下一篇: 【转】玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化
长山的随笔
博客等级 码龄17年 2664粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值