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.

参考:

  • https://blog.csdn.net/weixin_33807284/article/details/85093811

  • https://blog.csdn.net/niceniuniu/article/details/65629401

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

  • https://www.cnblogs.com/jycboy/p/gmock_summary.html

  • 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. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

  2. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  3. python 单元测试 工具_Django单元测试工具test client使用详解

    The test client test client是一个python类,来模拟一个简单的"哑"浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情 ...

  4. SAP UI5 初学者教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  5. .NET 程序集单元测试工具 SmokeTest 应用指南

    Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke Test的自动化,可借用虚拟机的snapshot机 ...

  6. coverity代码检测工具介绍_微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...

  7. 常见单元测试工具介绍

    1.       C/C++语言开发的首选利器- C++Test 以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++开发的范畴. ...

  8. 代码质量管理工具】——sonar

    原文地址:https://blog.csdn.net/luckystar689/article/details/53871821 ----------------------------------- ...

  9. 代码合并工具_11个代码质量审核和管理工具,程序员必备!

    「 读者福利!2 TB 各类技术资源免费赠送 」 如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要.不良的代码不仅会影响代码的可维 ...

最新文章

  1. github组织存储库使用_为什么我不使用您的GitHub存储库
  2. 有限单元法基本原理和数值方法_SPH法介绍
  3. grafana+prometheus快速搭建MySql监控系统实践
  4. 通过options探测服务器信息,OPTIONS 方法在跨域请求(CORS)中的应用
  5. c 语言练习__去掉多余的空白字符_修正
  6. Hadoop HIVE 安装配置(单机集群)
  7. C++STL之next_permutation()函数使用
  8. Androidstudio设置Ctrl+W关闭当前编辑的页面窗口
  9. 蚂蚁警告:“‘includeantruntime‘未设置”
  10. python的格式化输入_如何在python中读取格式化的输入?
  11. cisco CEF的一点概述
  12. Scala对象 转Json字符串
  13. Linux tar打包命令详解
  14. QQ互联一直显示“未提交审核”
  15. 计算机工作原理--时钟概念
  16. 芯力特SIT1043Q完全替代恩智浦TJA1043
  17. 2200p如何连接wifi打印_柯尼卡美能达2200P打印机使用介绍
  18. js 转化为实体符_js字符实体 转义字符串
  19. 阿里Java代码规范
  20. 速卖通重点国家市场俄罗斯市场分析平台热销产品推荐

热门文章

  1. 为提高研发和测试质量而规范Scrum项目需求描述
  2. Ajax updatepanel用法
  3. Enterprise Library 2.0 Hands On Lab 翻译(14):加密应用程序块(一)
  4. centos 7.6安装java_安装 QRadar Community Edition
  5. honeywell新风系统控制面板说明_新风系统——不开窗也能清新呼吸
  6. ThinkSNS 仿蘑菇街 社区购物分享系统
  7. java电信计费项目论文_基于JAVA开发的电信IP计费系统设计毕业论文
  8. Python实现八皇后问题所有实现方式
  9. java程序设计教程实验报告_java程序设计课程--实验报告-实验13.doc
  10. python基础教程--代码集合(下)