首页 > 其他分享 >Google Test(GTest)和Google Mock(GMock)入门简介

Google Test(GTest)和Google Mock(GMock)入门简介

时间:2023-06-15 14:05:48浏览次数:50  
标签:Google int GMock virtual ASSERT GTest EXPECT TEST mock


Google Test


1. 自定义错误输出:

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";

for (int i = 0; i < x.size(); ++i) {
  EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}



2. ASSERT_* 与EXPECT_*系列的区别:

ASSERT_TRUE(condition)

ASSERT_FALSE(condition)

ASSERT失败导致当前case终止

EXPECT_TRUE(condition)

EXPECT_FALSE(condition)

EXPECT失败,打印错误,并继续执行当前case

在GTest中,二者的称呼为:Fatal assertion, Nonfatal assertion

什么时候用ASSERT,什么时候用EXPECT呢?一般性的原则是,当你希望程序出错后继续运行,以便让代码暴露出更多的潜在错误的时候,使用EXPECT。当你认为某处出错后继续运行没有意义的时候,使用ASSERT。例如,某个对象如果为NULL,后面对它的引用会导致null pointer error,那么最好还是用ASSERT_NE(NULL, obj)。




3. 比较运算符

ASSERT_*, EXPECT_*都有:

ASSERT_EQ, ASSERT_NE,ASSERT_LT,ASSERT_GT,ASSERT_LE,ASSERT_GE

EXPECT_EQ, EXPECT_NE,EXPECT_LT,EXPECT_GT,EXPECT_LE,EXPECT_GE

另外,GTEST还支持STRING的比较。相关函数有(以ASSERT为例)

ASSERT_STREQ,ASSERT_STRNE,ASSERT_STRCASEEQ,ASSERT_STRCASENE


4. TEST与TEST_F之间的区别

TEST_F比TEST强一些的地方在于TEST_F实际上会生成一个新类,该类有SetUp和TearDown函数用于建立和销毁数据结构。

同一个TestCase文件中不能混合使用TEST与TEST_F。

TEST_F(), Google Test will:

  1. Create a fresh test fixture at runtime
  2. Immediately initialize it via SetUp()
  3. Run the test
  4. Clean up by calling TearDown()
  5. Delete the test fixture. Note that different tests in the same test case have different test fixture objects, and Google Test always deletes a test fixture before it creates the next one. Google Test does not reuse the same test fixture for multiple tests. Any changes one test makes to the fixture do not affect other tests.


Google Mock

GoogleMock是个很强大的东西,测试一个模块的时候,可能涉及到和其他模块交互,可以将模块之间的接口mock起来,模拟交互过程。


1. Makefile里面需要加入 -lgmock才能正常连接

AM_LDFLAGS=-lpthread -lc -lm -lrt -lgtest -lgmock




2. 可以手工生成Mock类,也可以使用脚本生成

手工:


class ObProject: public ObSingleChildPhyOperator
{   
   public:
        ObProject();
        virtual ~ObProject();
        void reset(){};


        int add_output_column(const ObSqlExpression& expr);
        virtual int open();
        virtual int close();
        virtual int get_next_row(const common::ObRow *&row);
        virtual int64_t to_string(char* buf, const int64_t buf_len) const;
        ....
 };

class MockObProject : public ObProject

{
  public:
  MOCK_METHOD0(open, int());
  MOCK_METHOD0(close, int());
  MOCK_METHOD1(add_output_column, int(const ObSqlExpression &expr));
};



脚本:

需要mock ob_ms_tablet_location_proxy.h中的ObMergerLocationCacheProxy类,方法如下:

gmock_installed_dir/scripts/generator/gmock_gen.py ob_ms_tablet_location_proxy.h ObMergerLocationCacheProxy



3. 一个类中,只有virtual的member funciton能被mock(试验得到的结论),调用被mock的member function,function行为变成mocked behavior,调用类中没有被mock的member function,function行为与原类相同,不被mock改变。

ps,写了一个简单类,不是virtual居然也能被mock,奇怪。。。。在一个复杂类中,必须是virtual的才能被mock。 这些是实验得到的结论。

从理论上分析,应该必须是virtual才可以。所以,确定哪些函数要被mock,然后在头文件中将其virtual化。不然可别说我没有预先告诉你哦;)


4. 一个被Mock的函数,如果没有在EXPECT_CALL中指定expected behavior,系统将会为其指派默认行为(什么都不做,返回0),并且在屏幕上打印WARNING:

GMOCK WARNING:
 Uninteresting mock function call - returning default value.
     Function call: get_next_row(@0x7fff51a6b888 0x30c51529e0)
           Returns: 0
 Stack trace:





标签:Google,int,GMock,virtual,ASSERT,GTest,EXPECT,TEST,mock
From: https://blog.51cto.com/u_16162111/6486720

相关文章

  • 百度谷歌一起搜 - 百Google度 - Chrome插件2
    百度谷歌一起搜,我见过最好用的Chrome搜索插件。特此隆重推荐~ 谷歌百度一键搜索在Baidu里面搜Google,在Google里面搜百度!不用切换,松松搞定~~有图有真相:插件安装地址:http://t.cn/zWUv7wX插件安装地址:http://t.cn/zWUv7wX源码地址:https://github.com/raywill/BaiGoogleDu......
  • GTest测试框架中的friend(友元)使用注意点
    为了测试MyClass,写了一个测试caseTEST_F(MyClassTest,method){}GoogleTest框架中使用这样的测试单元时,会自动生成一个叫做MyClass_method_Test的类,在MyClass中声明友元的正确方法是:private:friendclassMyClass_method_Test;othervar...goeshere而不是:private:......
  • 百度谷歌一起搜 - 百Google度 - Chrome插件
    百度谷歌一起搜,我见过最好用的Chrome搜索插件。特此隆重推荐~ 谷歌百度一键搜索在Baidu里面搜Google,在Google里面搜百度!不用切换,松松搞定~~有图有真相:插件安装地址:http://t.cn/zWUv7wX插件安装地址:http://t.cn/zWUv7wX源码地址:https://github.com/raywill/BaiGoogleDu......
  • 新的Google Lyra音频编解码器对实时视频流意味着什么?
    正文字数:2602 阅读时长:4分钟通过语言编码中的码率缩减趋势,Lyra与Opus中的区别比较,Lyra的作用,XDN平台上的高效语音编码技术几个方面探讨新的GoogleLyra音频编解码器对实时视频流的意义。文/ RED5PRO https://www.red5pro.com/blog/what-does-the-new-google-lyra-audio-codec-......
  • 最新jQuery引用google地址外部文件(jquery 1.2.6至jquery1.7.2)
    评:1.很多网站都是使用这种方式引入,客户的浏览器可能已经缓存过了jquery。可以直接调用本地的,速度更快…2.Googlecode使用了cdn技术在很多地方有节点服务器,加载jquery时绝对不会比在你服务器上加载慢,本地服务器除外:)3.可以节省服务器流量,降低服务器带宽压力可以使用......
  • gtest框架的介绍与应用
    【摘要】在本文中,作者根据之前使用gtest框架进行测试的经验,总结了一些使用方式和案例。在这些案例中,我们可以了解到gtest框架的基本使用方法以及在我们日常测试中的应用,同时也能促进我们对于百度的btest的了解。在我们之后的测试工作中,可以根据各个项目的特点以及gtest、btest等......
  • Google 开源 RPC 框架 gRPC
    gRPC是Google开源的一款高性能RPC框架,前两天发布了1.0版本。RPC(RemoteProcedureCall)即远程过程调用,通过RPC,客户端的应用程序可以方便地调用另外一台机器上的服务端程序,因而常被应用于分布式系统中。RPC框架通常使用IDL(InterfaceDescriptionLanguage)定义客户......
  • 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
    前段时间学习和了解了下Google的开源C++单元测试框架GoogleTest,简称gtest,非常的不错。我们原来使用的是自己实现的一套单元测试框架,在使用过程中,发现越来越多使用不便之处,而这样不便之处,gtest恰恰很好的解决了。其实gtest本身的实现并不复杂,我们完全可以模仿gtest,不断的完善我们......
  • Google Earth Engine(GEE)——美国干旱监测数据集
    美国干旱监测美国干旱监测是每周四发布的地图,显示美国部分地区处于干旱状态。该地图使用五个分类:异常干燥(D0),显示可能进入或正在走出干旱的地区,以及四个级别的干旱:中度(D1),严重(D2),极端(D3)和特殊(D4)。自1999年成立以来,干旱监测一直是一个团队的努力,由内布拉斯加大学林肯分校的国家干旱缓......
  • Google Earth Engine(GEE)——全球干旱指数(Global-Aridity_ET0)和全球参考蒸发量(Global-E
    全球干旱度指数全球干旱指数(Global-Aridity_ET0)和全球参考蒸发量(Global-ET0)第三版数据集提供了1970-2000年期间高分辨率(30角秒)的全球栅格气候数据,与潜在植物生长的蒸发过程和降雨量不足有关,基于参考作物的PenmanMonteith蒸发量方程式的实施。该数据集是根据WorldClim2.1在30角秒......