Mock工具介绍
什么是Mock
如果将mock单独翻译过来,其意义为 “虚假、虚设”,因此在软件开发领域,我们也可以将其理解成 “虚假数据”,或者 “真实数据的替身”。
为什么使用Mock
1.解除依赖,团队并行工作
接口尚未开发完成,在系统交互双方定义好接口之后,我们可以提前进行开发和测试,并不依赖上游系统的开发实现。
2.开启TDD模式,即测试驱动开发
单元测试是TDD的基石,当接口定义好后,测试人员就可以创建一个Mock,把接口添加到自动化测试环境中,提前创建测试。
3.隔离系统
通过编写Mock,隔离请求操作(Get、Post)对于数据库中数据的污染。
4.提升测试覆盖度
通过Mock接口返回的不同状态,来查看系统是否能够正常影响,提升测试的覆盖度。
5.方便演示
通过使用Mock模拟数据接口,我们即可在只开发了UI的情况下,无须服务端的开发就可以进行产品的演示。
除此之外,Mock可以加深我们对测试的理解,深入明白测试“输入”和“输出”的不同表达形式,同时还能提高自身技术,脱离功能测试对于开发的依赖。
市面上常见的Mock工具
市面上常见的Mock分为单元测试级别的Mock工具和接口测试级别的Mock工具
单元测试级别的mock工具
单元测试级别的Mock工具有Easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等。
EasyMock
EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。
JMock
JMock是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能,模拟对象的背后目的就是创建一个轻量级的、可控制的对象来代替测试中需要的真实对象,模拟真实对象的行为和功能,方便我们的测试。JMock就是这种机制的实现,使用JMock我们可以快速创建模拟对象,定义交互过程中的约束条件等,同时JMock也是易扩展的,你可以很方便添加自定义的需求。
Mockito
Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。
Mockito 拥有的非常少的 API,所有开始使用 Mockito,几乎没有时间成本。因为只有一种创造 mock 的方式。只要记住,在执行前 stub,而后在交互中验证。你很快就会发现这样 TDD java 代码是多么自然。
单元测试Mock工具对比
Features:
Feature | EasyMock | jMock | Mockito | UnitilsMock | PowerMock(EasyMock) | PowerMock(Mockito) | JMockit | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Invocation count constraints(调用数限制) | √ | √ | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Recording strict expectations(记录严格的预期结果) | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Explicit verification(显式验证) | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Partial mocking(部分mock) | √ | √ | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Easier argument matching based on properties of value objects(基于值对象属性的简化参数匹配) | √ | √ | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Cascading mocks(级联mock) | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mocking of multiple interfaces(多接口mock) | √ | √ | √ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mocking of annotation types(注释类型mock) | √ | √ | √ | √ | √ | |||||||||||||||||||||||||||||||||||||||||||||||||||||
Partially ordered expectations | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Auto-injection of mocks(mock的自动注入) | √ | √ | √ | √ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mocking of enums(枚举的mock) | √ |
TAG: 《软件自动化测试开发》《自动化平台测试开发》作者,公众号"测试开发社区" ,博客www.autotestplat.com 。 标题搜索日历
我的存档数据统计
清空Cookie - 联系我们 - 51Testing软件测试网 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Powered by 51Testing
© 2003-2021
|