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。

For each test defined with 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 Test(GTest)和Google Mock(GMock)入门简介相关推荐

  1. Google Mock(Gmock)简单使用和源码分析——源码分析

    源码分析 通过<Google Mock(Gmock)简单使用和源码分析--简单使用>中的例子,我们发现被mock的相关方法在mock类中已经被重新实现了,否则它们也不会按照我们的期待的行为 ...

  2. Google Test(GTest)使用方法和源码解析——模板类测试技术分析和应用

    写C++难免会遇到模板问题,如果要针对一个模板类进行测试,似乎之前博文中介绍的方式只能傻乎乎的一个一个特化类型后再进行测试.其实GTest提供了两种测试模板类的方法,本文我们将介绍方法的使用,并分析其 ...

  3. Google Test(GTest)使用方法和源码解析——参数自动填充技术分析和应用

    在我们设计测试用例时,我们需要考虑很多场景.每个场景都可能要细致地考虑到到各个参数的选择.比如我们希望使用函数IsPrime检测10000以内字的数字,难道我们要写一万行代码么?(转载请指明出于bre ...

  4. Google Test(GTest)使用方法和源码解析——私有属性代码测试技术分析

    有些时候,我们不仅要测试类暴露出来的公有方法,还要测试其受保护的或者私有方法.GTest测试框架提供了一种方法,让我们可以测试类的私有方法.但是这是一种侵入式的,会破坏原来代码的结构,所以我觉得还是谨 ...

  5. Google Test(GTest)使用方法和源码解析——预处理技术分析和应用

    预处理 在<Google Test(GTest)使用方法和源码解析--概况>最后一部分,我们介绍了GTest的预处理特性.现在我们就详细介绍该特性的使用和相关源码.(转载请指明出于brea ...

  6. Google Test(GTest)使用方法和源码解析——断言的使用方法和解析

    在之前博文的基础上,我们将介绍部分断言的使用,同时穿插一些源码.(转载请指明出于breaksoftware的csdn博客) 断言(Assertions) 断言是GTest局部测试中最简单的使用方法,我 ...

  7. Google Test(GTest)使用方法和源码解析——Listener技术分析和应用

    在<Google Test(GTest)使用方法和源码解析--结果统计机制分析>文中,我么分析了GTest如何对测试结果进行统计的.本文我们将解析其结果输出所使用到的Listener机制. ...

  8. Google Test(GTest)使用方法和源码解析——结果统计机制分析

    在分析源码之前,我们先看一个例子.以<Google Test(GTest)使用方法和源码解析--概况 >一文中最后一个实例代码为基准,修改最后一个"局部测试"结果为错误 ...

  9. Google Test(GTest)使用方法和源码解析——自动调度机制分析

    在<Google Test(GTest)使用方法和源码解析--概况 >一文中,我们简单介绍了下GTest的使用和特性.从这篇博文开始,我们将深入代码,研究这些特性的实现.(转载请指明出于b ...

  10. 谷歌云端硬盘 转存_如何合并多个Google云端硬盘和Google相册帐户

    谷歌云端硬盘 转存 It isn't possible to merge Google accounts directly, making it tricky to move your data fr ...

最新文章

  1. java实体属性对应mysql和SQL Server 和Oracle 数据类型对应
  2. python零基础入门教材-python如何零基础学习,如何入好门?
  3. linux下安装mysql的方式_linux下安装mysql的两种方式
  4. jdk1.8以前不建议使用其自带的Base64来加解密
  5. java list 去重复元素_java List去掉重复元素的几种方式
  6. list steam_在 Steam 中国版上玩单机游戏也会受到防沉迷系统管控
  7. C++Builder STL 泛型
  8. c语言vs2010中F10使用方法,VS2010快捷键及设置
  9. Python机器学习入门;推荐一本Python数据分析与机器学习入门书籍-唐宇迪《跟着迪哥学 Python数据分析与机器学习实战》PDF+源代码
  10. 计算机显示发送报告,Word文档打不开提示发送错误报告的解决方法
  11. 有效解决jdbc连接mysql提示Access denied for user ‘‘@‘localhost‘ to database ‘mysql1‘
  12. OkHttp日常使用实战篇
  13. 网吧组网产品升级方案
  14. 努比亚修复工具_努比亚Play刷机包(官方刷机完整固件升级包V2)
  15. 高性能网站建设进阶指南:Web开发者性能优化最佳实践 pdf扫描版
  16. cygwin linux 教程,Cygwin工具使用入门教程
  17. 计算机开机总显示密码错误如何解决,快速解决win10开机密码错误开不了机的问题...
  18. 华为手机怎么用计算机玩隐藏空间,华为隐私空间怎么用?开启隐私空间私人信息存储更安全...
  19. LAMP编程之Linux(2)
  20. uniapp中web-view的使用

热门文章

  1. html接入qq客服,Vue 前端框架接入QQ在线客服
  2. 【愚公系列】2022年12月 .NET CORE工具案例-PLG轻量级日志可视化服务
  3. Exchanger 简单了解
  4. 10.11 10.12 英语单词
  5. Can‘t load IA 32-bit .dll on a AMD 64-bit platform Tomcat启动报错的解决办法
  6. SAP ABAP 一个有用的程序正确性辅助工具,Checkpoint group 的使用方法介绍试读版
  7. JAVA SE 接口实现与Comparable接口
  8. 可以一键生成crud的php框架,一键生成CRUD - FastAdmin框架文档 - FastAdmin开发文档
  9. python 学习笔记(二)
  10. 真韵味俱乐部游戏方式