3 第三步是可选的,设置为mock 对象的default action
ON_CALL(foo, GetSize()) // #3
.WillByDefault(Return(1));
// ... other default actions ...
4 设置你对mock对象的期望行为,比如如何被调用,将做什么
EXPECT_CALL(foo, Describe(5)) // #4
.Times(3)
.WillRepeatedly(Return("Category 5"));
// ... other expectations ...
5 对mock对象期望的行为进行验证,一般使用google test的断言
EXPECT_EQ("good", MyProductionFunction(&foo)); // #5
6 对象的析构,google mock 会自动处理
完整的示例如下:
using ::testing::Return; // #1
TEST(BarTest, DoesThis) {
MockFoo foo; // #2
ON_CALL(foo, GetSize()) // #3
.WillByDefault(Return(1));
// ... other default actions ...
EXPECT_CALL(foo, Describe(5)) // #4
.Times(3)
.WillRepeatedly(Return("Category 5"));
// ... other expectations ...
EXPECT_EQ("good", MyProductionFunction(&foo)); // #5
} // #6
Times()子句可以省略。如果你省略Times(),Google Mock会推断出你的基数。规则很容易记住:
-
如果WillOnce()和WillRepeatedly()都不在EXPECT_CALL()中,则推断的基数是Times(1)。
-
如果有n个WillOnce(),但没有WillRepeatedly(),其中n> = 1,基数是Times(n)
-
如果有n个WillOnce()和一个WillRepeatedly(),其中n> = 0,基数是Times(AtLeast(n))。
-
Fake
objects have working implementations, but usually take some shortcut (perhaps to make the operations less expensive), which makes them not suitable for production. An in-memory file system would be an example of a fake.
-
Mocks
are objects pre-programmed with
expectations
, which form a specification of the calls they are expected to receive.
Mock
是什么?
在单元测试、模块的接口测试时,当这个模块需要依赖另外一个或几个类,而这时这些个类还没有开发好,这时我们就可以定义了
Mock
对象来模拟那些类的行为。
也就是自己实现一个假的依赖类,对这个类的方法你想要什么行为就可以有什么行为,你想让这个方法返回什么结果就可以返回怎么样的结果。G
mock
的特性:
轻松地创建
mock
类
支持丰富的匹配器(Matcher)和行为(Action)
本文翻译自:https://github.com/
google
/
google
test
/blob/master/
google
mock
/docs/CheatSheet.md
一、定义一个模拟类
1. 模拟一个正常的类,就是接口类
classFoo {
virtual~Foo();
virtualintGetSize()con...
开发中经常用到单元测试,但有的逻辑代码涉及到数据库操作,当然,在测试的时候可以连接数据库测试,但有一些特殊情况是不能让工程编译的时候连接数据库的,这个时候单元测试就会出问题。于是,在不是主要测试数据库的逻辑单元测试的时候,就可以用单元测试中的
Mock
功能来模拟数据,从而测试逻辑代码结构是否完整,是否可以用某些特定的参数得到相应的结果。
简单的说就是:通过模拟数据进行各类的单元测试
首先...
目录一、简单Demo1.1 共同约定1.2 小A任务1.3 我的任务1.4 常规运行1.5 测试输出二、基本流程三、
MOCK
_METHOD四、EXPECT_CALL
第一篇文章(C++开发测试工具g
mock
的安装与使用超详解)和第二篇文章(C++开发测试工具g
mock
的使用详解)分别对g
mock
的安装、配置与使用案例进行了详细介绍,本文将对抽象接口类进行g
mock
打桩测试进行介绍,结合上文一起食用效果更佳哦~
一、简单Demo
首先来编写一个简单Demo,编写代码之前,首先需要将解决方案的平台与目标程序一致
在前面,我们看到的都是单对象单方法仅有1种预期行为定义的情况,如果定义了多个呢?假如我们在后面调用了三次Forwar(10),那么测试会报错不通过。如果调用了两次Forward(10),一次Forward(20),那么测试会通过。
转一篇小亮同学的
google
mock
分享第 1 行的
mock
_object就是你的
Mock
类的对象第 1 行的 method(matcher1 , matcher2 , …) 中的method就是你
Mock
类中的某个方法名,比如上述的getArbitraryString;而matcher(匹配器)的意思是定义方法参数的类型,我们待会详细介绍。第 3 行的 Times(cardinality) 的意思是之前定义的method运行几次。至于cardinality的定义,我也会在后面详细介绍。
一, 问题
g
mock
提供了EXPECT_CALL的WillOnce 和WillRepeatedly方法来模拟返回值比较简单的情况(可以参考http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html),
但是有时需要模拟更复杂的行为. 例如需要 "返回一个有序数列中大于某个值的最小数", 即stl中的l
一、什么是
Google
C ++
Mock
ing Framework?
当你写一个原型或测试,往往不能完全的依赖真实对象。一个
mock
对象实现与一个真实对象相同的接口,但让你在运行时指定它时,如何使用?它应该做什么?(哪些方法将被称为?什么顺序?多少次?有什么参数?他们会返回什么?等)
注意:很容易混淆伪造对象和模拟对象。fakes和
mock
在测试驱动开发(TDD)社区中实际上意味着非常不同的东西:
Fake(伪对象)有工作实...
Test
Mock
简介
换种思路写
Mock
,让单元测试更简单
无需初始化,不挑服务框架,甭管要换的是私有方法、静态方法、构造方法还是其他任何类的任何方法,也甭管要还的对象是怎么创建的。写好
Mock
定义,加个@
Mock
Method注解,一切统统搞定
好吧,上面这段是作者写的,因工作需要没有使用其他
Mock
框架而使用阿里的,总的来说很简单,但在一开始使用的过程中有坑,而且网上现在资料很少,作者更新的版本也很快,很难解决问题,在这里我也总结一下遇到的一些问题以及使用,感觉不错的话点赞一下,有问题也希望大家及时指出
本次文章以一个真实业务中的`进程管理类`测试的过程中遇到的问题和解决办法,覆盖了`参数测试`、`
Mock
接口测试`、`接口耗时测试`这三个方面,会简单的提及`类型测试`。并且配合VSCode的CMake Tools插件,快捷而方便的进行`进程管理类`的测试。...