Mock,更确切地说应该是Mock Object。当我们在单元测试、模块的接口测试时,当这个模块需要依赖另外一个/几个类,而这时这些类还没有开发好,这时我们就可以定义Mock对象来模拟那些类的行为。

mock工具的其中一个非常重要的作用是指定函数的行为(模拟函数的行为)。可以对入参进行校验,对出参进行设定,还可以指定函数的返回值。

Google's framework for writing and using C++ mock classes on a variety of platforms (Linux, Mac OS X, Windows, Windows CE, Symbian, etc). Inspired by jMock, EasyMock, and Hamcrest, and designed with C++'s specifics in mind, it can help you derive better designs of your system and write better tests.

Google Mock:

  • provides a declarative syntax for defining mocks,

  • can easily define partial (hybrid) mocks, which are a cross of real and mock objects,

  • handles functions of arbitrary types and overloaded functions,

  • comes with a rich set of matchers for validating function arguments,

  • uses an intuitive syntax for controlling the behavior of a mock,

  • does automatic verification of expectations (no record-and-replay needed),

  • allows arbitrary (partial) ordering constraints on function calls to be expressed,

  • lets a user extend it by defining new matchers and actions.

  • does not use exceptions, and

  • is easy to learn and use.

Google Mock is not a testing framework itself. Instead, it needs a testing framework for writing tests. Google Mock works seamlessly with Google Test, but you can also use it with any C++ testing framework.

参考:

  • http://coney.github.io/2015/05/mock-static-function-with-mockcpp/

  • MockCpp手册(中文)

1. 代码 mock_test.cc

#include <gtest/gtest.h>
#include <gmock/gmock.h>using namespace testing;class A {
public:int set(int num) {value = num;return num;}int get() {return value;}int value;
};class MockA : public A {
public:MOCK_METHOD1(set, int(int num));MOCK_METHOD0(get, int());};TEST(Atest, getnum)
{MockA m_A;int a = 10;EXPECT_CALL(m_A, set(_)).WillRepeatedly(Return(a));int k = m_A.set(200);EXPECT_EQ(10, k);
}int main(int argc, char *argv[]) {::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

2. 编译

g++ mock_test.cc -lgtest -lgmock -lpthread -std=c++11

3. 测试执行

baoli@ubuntu:~/tools/gtest/mytest$ ./a.out
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from Atest
[ RUN      ] Atest.getnum
[       OK ] Atest.getnum (0 ms)
[----------] 1 test from Atest (0 ms total)[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

4. 说明

4.1 MOCK_METHOD

MOCK_METHOD1(set, int(int num));    //调用set方法,一个参数(int num),返回int型

MOCK_METHOD0(get, int());           //调用get方法,无参数,返回int型

4.2 EXPECT_CALL

This means EXPECT_CALL() should be read as expecting that a call will occur in the future, not

that a call has occurred. Why does Google Mock work like that? Well, specifying the expectation

beforehand allows Google Mock to report a violation as soon as it arises, when the context (stack

trace, etc) is still available. This makes debugging much easier

单元测试: gmock相关推荐

  1. P4使用Ubuntu中安装教程

    /*************************************/ 补充,2020年5月11日 13点18分 有同学说网络环境啥的,获取安装包比较困难,我把大概要用的安装包放到百度网盘了, ...

  2. 代码单元测试工具:gmock

    Mock,更确切地说应该是Mock Object.当我们在单元测试.模块的接口测试时,当这个模块需要依赖另外一个/几个类,而这时这些类还没有开发好,这时我们就可以定义Mock对象来模拟那些类的行为. ...

  3. C++单元测试学习总结9

    C++单元测试一:并非看上去那么简单--几个很实际的问题 理想与现实 为Java和C#做单元测试,基本上都有比较统一的工具.模式可用,IDE的支持也非常到位:可是到 了C++这里,一切就变的那样的&q ...

  4. gmock学习01---Linux配置gmock

    本文目的 本文主要介绍gmock 1.6.0版本在Linux上如何部署和使用. gmock是做什么的? 使用C++手动编写mock对象将会是一件十分耗时,易于出错,枯燥乏味的事情.gmock提供一整套 ...

  5. 效能优化实践:C/C++单元测试万能插桩工具

    作者:mannywang,腾讯安全平台后台开发 研发效能是一个涉及面很广的话题,它涵盖了软件交付的整个生命周期,涉及产品.架构.开发.测试.运维,每个环节都可能影响顺畅.高质量地持续有效交付.在腾讯安 ...

  6. 工程师必备:C/C 单元测试万能插桩工具

    研发效能是一个涉及面很广的话题,它涵盖了软件交付的整个生命周期,涉及产品.架构.开发.测试.运维,每个环节都可能影响顺畅.高质量地持续有效交付.在腾讯安全平台部实际研发与测试工作中我们发现,代码插桩隔 ...

  7. 玩转Google开源C++单元测试框架

    玩转Google开源C++单元测试框架Google Test系列(gtest)(总) 前段时间学习和了解了下Google的开源C++单元测试框架Google Test,简称gtest,非常的不错. 我 ...

  8. 第一章 UT单元测试——GoogleTest通用构建说明

    系列文章目录 第一章 UT单元测试--GoogleTest通用构建说明 第二章 UT单元测试--GTest框架实例 文章目录 系列文章目录 前言 GoogleTest通用构建说明 设置 用CMake构 ...

  9. googletest单元测试框架安装及使用

    1.下载googletest 介绍:现在的googletest软件包分两部分,一部分是gtest,单元测试框架,实现对单元测试用例的管理和设计,另一部分是gmock,实现打桩功能,这两个可以结合起来使 ...

最新文章

  1. 感知机模拟或门的实现:权重和阈值的设置
  2. MySQL5.6一主多从复制配置方式一:Tungsten复制中间件
  3. 用 javascript 获取当页面上鼠标(光标)位置
  4. mongodb用户管理简单记录
  5. 《A Berkeley View of systems challenges for AI》总结
  6. 如何在AS/400上发送带有颜色的MESSAGE
  7. python如何设置字体大小_[Python Basic]如何设置 Python 的运行环境
  8. 马化腾定义腾讯是普通公司,这波重新定义“普通”可还行......
  9. HandlerAdapter解析参数过程之HandlerMethodArgumentResolver
  10. Qt4_子类化QTableWidgetItem
  11. Laravel5.x 封装的上传图片类
  12. 安卓蓝牙BluetoothBLE开发JDY-10M
  13. 安装spinningup填坑ERROR: Could not build wheels for mpi4py which use PEP 517
  14. elasticsearch删除过期数据
  15. 计算机职场礼仪与技巧论文,职场礼仪论文1500字.doc
  16. 机器视觉——相机选型
  17. 物联网操作系统HelloX V1.82发布公告
  18. 前端入门篇(八)表单
  19. C#之父牛逼还是Java之父牛逼?
  20. 树莓派调用as608指纹模块,实现指纹识别功能

热门文章

  1. webpack指南-webpack入门-webpack的安装
  2. HTML常见标签总结
  3. PowerDesigner的使用二
  4. php 当我添加数据成功后跳到首页 为什么刷新还会增加数据,使用post提交数据之后,有错误,页面刷新之后,想保持原有值...
  5. Java源码:java.lang.reflect反射之AccessibleObject、ReflectionFactory、Filed、Method、Constructor类
  6. 關於BigDecimal的比較
  7. 童话镇计算机乐谱,童话镇简谱(歌词)-陈一发演唱-桃李醉春风记谱
  8. android权限 启动失败,Android 6.0打开失败:EACCES(权限被拒绝)
  9. c++类指针赋值表达式必须是可修改的左值_C++学习刷题8--复制构造函数和赋值运算符重载函数...
  10. Golang 检查元素在slice中是否存在 模仿Php实现arrary_In