easymock学习笔记(2)--mock对象创建过程
来源:互联网 发布:阿里云短信发送java 编辑:程序博客网 时间:2024/06/01 07:33
上一篇对easymock框架只能对接口进行mock的认识是错误的,对于easymock框架只能对接口进行mock来源于网上搜索的结果,自己在看源代码时也没有认真看。今天特地看了一下才发现最新版本的easymock可以直接对类进行mock并不需要再导入其它jar文件。
创建mock对象
创建的Mock对象有三种,分别是:strict、default、nice
//创建strict类型mock对象
final IMethods iMethods1 = EasyMock.createNiceMock(IMethods.class);
//创建strict类型mock对象
final IMethods iMethods2 = EasyMock.createMock(IMethods.class);
//创建strict类型mock对象
final IMethods iMethods3 = EasyMock.createStrictMock(IMethods.class);
当mock对象时为nice类型时,当mock调用的方法没有录制或调用的次数超过预设的调用次数时会返回null
当mock对象时为default类型时,mock对象调用方法的顺序无需mock对象录制的顺序一致,但mock调用的方法没有录制或调用的次数超过预设的调用次数时会抛异常
当mock对象时为strict类型时,mock对象调用方法的顺序必须和mock对象录制的顺序一致,否则会抛异常
对接口创建Mock对象的时序图
主要是handler对象的创建过程,mockControl类中的createMock方法
public <T> T createMock(final Stringname, final Class<T> toMock, final ConstructorArgs constructorArgs, final Method... mockedMethods) { if (toMock.isInterface() && mockedMethods != null) { throw new IllegalArgumentException("Partial mocking doesn't makesense for interface"); } try { //判断当前状态是不是记录状态,如果replay状态就会抛出异常,创建mockControl对象时state初始化为RecordState state.assertRecordState(); //如果要为接口创建mock对象,则采用java自带的proxy类来创建代理对象,如果要为类创建mock对象,则采用cglib库中的方法来创建代理对象 final IProxyFactory proxyFactory = toMock.isInterface() ? interfaceProxyFactory : getClassProxyFactory(); //创建mock对象 return proxyFactory.createProxy(toMock, new ObjectMethodsFilter(toMock, new MockInvocationHandler(this), name), mockedMethods, constructorArgs); } catch (final RuntimeExceptionWrapper e) { throw (RuntimeException) e.getRuntimeException().fillInStackTrace(); } }
如果要mock的是接口,最终产生代理对象的是JavaProxyFactory类中的createProxy方法
public <T> T createProxy(Class<T> toMock, InvocationHandler handler, Method[] mockedMethods, ConstructorArgs constructorArgs) { return (T) Proxy.newProxyInstance(toMock.getClassLoader(), new Class[] { toMock }, handler); }可以看出最终还是调用java proxy类来产生代理对象的
- easymock学习笔记(2)--mock对象创建过程
- easymock源代码学习笔记(1)
- easymock源码学习笔记(3)--录制
- easymock源码学习笔记(3)--回放
- 使用EasyMock扩展为Class提供Mock对象
- mock server 学习笔记
- Mock object and EasyMock framework
- java对象创建过程 笔记
- 学习笔记之 equals() vs. == 和String对象的2种创建过程
- 使用easymock进行业务逻辑层测试(使用spring生产mock对象)
- 使用Mockito中@Mock快速创建mock对象
- DirectSound学习笔记(2):创建设备对象
- easymock学习
- JUnit学习笔记8---mock object进行独立测试2
- JUnit学习笔记8---mock object进行独立测试2
- 学习笔记---对象初始化过程
- Mock-jmock&easymock 小凯总结
- Mock测试工具之EasyMock教程
- 题目1432:叠筐
- 堆排序和优先队列
- UVA 10935 - Throwing cards away I
- Android解析自定义xml文件(方案一)
- qtopia2.2.0编译错误的解决办法
- easymock学习笔记(2)--mock对象创建过程
- 0. 磁盘读写与数据库的关系
- oracle bbed 文档Disassembling the Oracle Data Block 翻译(3)
- php页面静态化的方法(新手笔记)
- snprintf函数的使用
- PAT_1011: World Cup Betting
- 语音识别
- 学生信息管理系统
- java 内return语句总结