java mock 工具
来源:互联网 发布:刷单淘宝老号在哪里买 编辑:程序博客网 时间:2024/06/10 20:06
1. mock对象
一个测试例子:
为了测试 类A, 有 以下方案:
方案1: 把整个依赖树构建出来,也就是BCDE的实例
但是, 当 类 B,C,D,E一个或多个未开发完成时或者 想让 A,B,C三个类隔离开来,如何测试类A呢? 此时可以考虑下面的方案。
方案2: 使用mock
2. mock 关键点
关键点描述Stubbing (桩)
通常它可以用来提供那些测试所需的公共属性(像getters和setters)和公共方法。
返回一个特殊的值,抛出一个错误或者触发一个事件,此外,你可能希望指出方法被调用时的不同行为(即通过传递匹配的类型或者参数给方法)。
许多mocking框架的一个重要功能就是你不需要提供stub 的实体方法,也不用在执行测试期间stub那些未被调用的方法或者未使用的属性。设置预期设置预期结果:要求一个特定的函数被准确的调用3次,或不被调用,或调用至少两次但不超过5次,或者需要满足特定类型的参数、特定值和以上任意的组合的调用。
验证预期结果首先你设定好预期结果,然后去验证你的预期结果是否正确。
Stubbing (桩)
通常它可以用来提供那些测试所需的公共属性(像getters和setters)和公共方法。返回一个特殊的值,抛出一个错误或者触发一个事件,此外,你可能希望指出方法被调用时的不同行为(即通过传递匹配的类型或者参数给方法)。
许多mocking框架的一个重要功能就是你不需要提供stub 的实体方法,也不用在执行测试期间stub那些未被调用的方法或者未使用的属性。设置预期设置预期结果:要求一个特定的函数被准确的调用3次,或不被调用,或调用至少两次但不超过5次,或者需要满足特定类型的参数、特定值和以上任意的组合的调用。
验证预期结果首先你设定好预期结果,然后去验证你的预期结果是否正确。
3. mock好处
好处描述开发前创建测试; TDD(测试驱动开发)
如果你创建了一个Mock那么你就可以在service接口创建之前写Service Tests了,这样你就能在开发过程中把测试添加到你的自动化测试环境中了。换句话说,模拟使你能够使用测试驱动开发。
例如:依赖的系统尚未开发完成时并行工作
开发测试并行 隔离系统
在没有系统其他部分的影响下测试系统单独的一部分。
为无法访问的资源编写测试
当你想要测试一个service接口,但service需要经过防火墙访问,防火墙不能为你打开或者你需要认证才能访问。遇到这样情况时,你可以在你能访问的地方使用MockService替代,这就是一个“救生圈”功能。
Mock 可以交给用户
在有些情况下,某种原因你需要允许一些外部来源访问你的测试系统,像合作伙伴或者客户。这些原因导致别人也可以访问你的敏感信息,而你或许只是想允许访问部分测试环境。在这种情况下,如何向合作伙伴或者客户提供一个测试系统来开发或者做测试呢?最简单的就是提供一个mock,无论是来自于你的网络或者客户的网络。soapUI mock非常容易配置,他可以运行在soapUI或者作为一个war包发布到你的java服务器里面。
创建一个验证或者演示程序
由于Mocks非常高效,Mocks可以用来创建一个概念证明,作为一个示意图,或者作为一个你正考虑构建项目的演示程序。这为你决定项目接下来是否要进行提供了有力的基础,但最重要的还是提供了实际的设计决策。
如果你创建了一个Mock那么你就可以在service接口创建之前写Service Tests了,这样你就能在开发过程中把测试添加到你的自动化测试环境中了。换句话说,模拟使你能够使用测试驱动开发。
例如:依赖的系统尚未开发完成时并行工作
开发测试并行 隔离系统
在没有系统其他部分的影响下测试系统单独的一部分。
为无法访问的资源编写测试
当你想要测试一个service接口,但service需要经过防火墙访问,防火墙不能为你打开或者你需要认证才能访问。遇到这样情况时,你可以在你能访问的地方使用MockService替代,这就是一个“救生圈”功能。
Mock 可以交给用户
在有些情况下,某种原因你需要允许一些外部来源访问你的测试系统,像合作伙伴或者客户。这些原因导致别人也可以访问你的敏感信息,而你或许只是想允许访问部分测试环境。在这种情况下,如何向合作伙伴或者客户提供一个测试系统来开发或者做测试呢?最简单的就是提供一个mock,无论是来自于你的网络或者客户的网络。soapUI mock非常容易配置,他可以运行在soapUI或者作为一个war包发布到你的java服务器里面。
创建一个验证或者演示程序
由于Mocks非常高效,Mocks可以用来创建一个概念证明,作为一个示意图,或者作为一个你正考虑构建项目的演示程序。这为你决定项目接下来是否要进行提供了有力的基础,但最重要的还是提供了实际的设计决策。
4. java mock工具对比
featureEasyMockjMockMockitoUnitils MockPowerMock:
EasyMock
APIPowerMock:
Mockito
APIJMock
itInvocation count constraints√√√ √√√Recording strict expectations√√ √ √Explicit verification √√ √√Partial mocking√ √√√√√No method call to switch from record to replay √√ √√No extra code for implicit verification N/AN/A N/A√No extra "prepare for test" code√√√√ √No need to use @RunWith annotation or base
test class√√√ √Consistent syntax between void and non-void methods √ √ √Argument matchers for some parameters only,
not all √ √Easier argument matching based on properties
of value objects√ √√√√√Cascading mocks √√ √√Support for mocking multiple interfaces √ √√Support for mocking annotation types √√√ √√Partially ordered expectations √ √Mocking of constructors and final/static/native/private methods √√√Declarative application of mocks/stubs to
whole test classes √√√Auto-injection of mocks √√ √√Mocking of "new-ed" objects √√√Support for mocking enum types √√√Declarative mocks for the test class (mock
fields) √√√√√Declarative mocks for test methods
(parameters, local fields) √Special fields for "any" argument matching √Use of an special field to specify invocation
results √Use of special fields to specify invocation
count constraints √Expectations with custom error messages √On-demand mocking of unspecified implementation classes √Capture of instances created by code under
test √Recording & verification of expectations in
loops √Support for covariant return types √"Duck typing" mocks for state-based tests √Single jar file in the classpath is sufficient to
use mocking API √ N/AN/A√Total6/327/3213/3111/319/3114/3032/32Total when ignoring JMockit-only features6/227/2213/2111/219/2114/2022/22
EasyMock
APIPowerMock:
Mockito
APIJMock
itInvocation count constraints√√√ √√√Recording strict expectations√√ √ √Explicit verification √√ √√Partial mocking√ √√√√√No method call to switch from record to replay √√ √√No extra code for implicit verification N/AN/A N/A√No extra "prepare for test" code√√√√ √No need to use @RunWith annotation or base
test class√√√ √Consistent syntax between void and non-void methods √ √ √Argument matchers for some parameters only,
not all √ √Easier argument matching based on properties
of value objects√ √√√√√Cascading mocks √√ √√Support for mocking multiple interfaces √ √√Support for mocking annotation types √√√ √√Partially ordered expectations √ √Mocking of constructors and final/static/native/private methods √√√Declarative application of mocks/stubs to
whole test classes √√√Auto-injection of mocks √√ √√Mocking of "new-ed" objects √√√Support for mocking enum types √√√Declarative mocks for the test class (mock
fields) √√√√√Declarative mocks for test methods
(parameters, local fields) √Special fields for "any" argument matching √Use of an special field to specify invocation
results √Use of special fields to specify invocation
count constraints √Expectations with custom error messages √On-demand mocking of unspecified implementation classes √Capture of instances created by code under
test √Recording & verification of expectations in
loops √Support for covariant return types √"Duck typing" mocks for state-based tests √Single jar file in the classpath is sufficient to
use mocking API √ N/AN/A√Total6/327/3213/3111/319/3114/3032/32Total when ignoring JMockit-only features6/227/2213/2111/219/2114/2022/22
5. Mockito
相对于EasyMock, Mockito的功能更多,Mockito的语法很自然(而EashMock之类的什么record,play模型显得有点多余)。Mockito的所有功能都在Mockito这个类中,里面的函数按功能可分为几类:
1. 参数匹配 — 就是Matchers里的那些any开头的函数
2. Mock
3. 打桩(stub)功能 — 就是那些do什么开头的函数
4. 验证模型, 包括atLeast,atLeastOnce,atMost,only,times等
注: easymock 学习
http://www.yiibai.com/easymock/
参考
http://blog.csdn.net/yasi_xi/article/details/24642517
http://liuzhijun.iteye.com/blog/1512780
http://blog.csdn.net/dc_726/article/details/8713236
http://www.oschina.net/translate/mockito-a-great-mock-framework-for-java-development
0 0
- Java mock工具-mockito
- java mock 工具
- Java 各种Mock工具比较
- mock工具
- Mock测试工具比较
- java mock 测试
- java mock-Mockito
- Java|spring Mock入门
- Mock
- mock
- mock
- mock
- junit java mock分享链接
- java的mock测试框架
- java mock及Mockito实战
- 使用mock进行java单元测试
- 单体测试mock对象工具简介
- Mock Object工具横向比较(上)
- BaiDu校招2016计算机视觉笔试试题
- ios机器上,应用列表的获得
- 如何查看手机型号,最好的查询方法
- Memcached 安装配置
- SQLite数据库操作
- java mock 工具
- mysql的配置文件详解
- XMPP协议_smack源码分析(一)
- Android的权限permission
- Openstack 快速入门(官方文档直译)
- weiphp微信支付开发教程
- 优秀博客收藏
- UI - UIPageControl
- 设计模式—构建器模式(Builder Pattern)