关于easy的短语(facemock框架)

作为一个月薪3000的屌丝民工,今天也开始写自己的微博了,打发一下dota之外的时光。写了一年的flex,虽然很是熟练,但是有啥用呢。新版flash的普及上不去,旧版的渲染太慢。还是改行好了。最近开始研究有啥好的东西,之前看了一下unity3d,但是发现自己得先去学3dmax,可是看了3dmax发现高手实在太多了。要学好也不知道要多久,况且自己的美术功底实在太差。专研一下后台吧,发现自己编码解码不

大家好,又见面了,我是你们的朋友全栈君。

作为一个月薪3000的屌丝民工,今天也开始写自己的微博了,打发一下dota之外的时光。接触编程一年了,写了一年的flex,虽然很是熟练,但是有啥用呢。新版flash的普及上不去,旧版的渲染太慢。还是改行好了。

今天下午看到了easymock。了解了他的使用方法后,很是惊奇,决定研究一下他的代码

Print qm=EasyMock.createMock(Print.class);

我先定义了一个Print类,然后用createMock方法生成

createMock()的源码是

public static <T> T createMock(final Class<T> toMock) {
        return createControl().createMock(toMock);
    }

createControl()方法生成了一个MocksControl对象

MocksControl中createMock()的实现是

public <T> T createMock(final String name, final Class<T> toMock, final ConstructorArgs constructorArgs,
            final Method... mockedMethods) {
        if (toMock.isInterface() && mockedMethods != null) {
            throw new IllegalArgumentException("Partial mocking doesn't make sense for interface");
        }


        try {
        //什么都没有做
            state.assertRecordState();
            final IProxyFactory proxyFactory = toMock.isInterface()
                    ? interfaceProxyFactory
                    : getClassProxyFactory();
//toMock是传入的类对象
            return proxyFactory.createProxy(toMock, new ObjectMethodsFilter(toMock,
                    new MockInvocationHandler(this), name), mockedMethods, constructorArgs);
        } catch (final RuntimeExceptionWrapper e) {
            throw (RuntimeException) e.getRuntimeException().fillInStackTrace();
        }
    }

这里面生成的关键是使用proxyFactory.createProxy来根据类生成对象。proxyFactory根据toMock的类型使用不同的子类,

toMock是接口的话,使用JavaProxyFactory,他通过java自带的反射机制类生成对象。

如果toMock不是接口,使用第三方jar包,如果是android的类(通过虚拟机来判断),则使用dexmarker这个jar包生成对象;

否则使用objenesis这个jar包来生成对象。

在生成对象的同时,我们还加入了一个方法MockInvocationHandler;

它保证了在调用了这个对象的方法后,将当前的MocksControl对象设置为这个对象专用的MocksControl对象。

qm.printHello(strgetter);
EasyMock.expectLastCall().andReturn("nihao3").times(2);

这就是为什么每次调用expectLastCall()时,能够顺利的操作他这个qm对应的MocksControl对象。

一个被生成的对象有一个专用的MocksControl对象来,来维护这个被生成对象的相关操作。

当前MocksControl的设置是通过LastControl.reportLastControl()来进行操作的。

他将MocksControl存储在ThreadLocal中,ThreadLocal不是一个被我们经常使用的弱类型的数据存储(类似map)。暂时还不明白这样设计的巧妙之处。

LastControl.lastControl()方法则是获取当前的MocksControl对象

今天看到这里,打算明天继续看看。全当作java的入门学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128555.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Google搜索解析规则-更准确的使用谷歌搜索引擎获取到自己想要的内容

    Google搜索解析规则-更准确的使用谷歌搜索引擎获取到自己想要的内容如果票选近二十年最伟大的发明,我相信搜索引擎肯定会占据一个不容小觑的位置,它不单是一项发明,更是一项成就,最大程度消灭了信息的不平等。既然人人都可以接触到海量的信息,那么衡量信息财富多寡就只剩下技巧这惟一的标准了:善用搜索引擎的都是信息时代的富翁,不懂搜索引擎的都是信息时代的负翁。而像程序员这种必须终生学习的职业,搜索引擎就是我们的左膀右臂。懂搜索引擎就是我们的基本功,不,应该是童子功。只

    2022年6月30日
  • Atom装逼神器activate-power-mode插件安装教程「建议收藏」

    Atom装逼神器activate-power-mode插件安装教程「建议收藏」关于Atom    Atom是github专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言。它支持宏,自动完成分屏功能,集成了文件管理器。安装 activate-power-mode插件1、安装Atom下载Atom:https://download.csdn.net/download/he…

    2022年7月14日
  • Java虚拟机:对象的创建过程

    Java虚拟机:对象的创建过程

    2021年4月10日
  • typora图床阿里云_织梦七牛云

    typora图床阿里云_织梦七牛云一、创建并上传文件到存储空间1.注册七牛账号,并且实名认证2.创建储存空间打开侧边栏,选择对象存储选择新建空间存储空间名称:按规则随便取存储区域:选择离靠近的地区访问控制:选择公开,否则

    2022年8月16日
  • 关于ASp.net中的session失效问题的解决办法之一

    关于ASp.net中的session失效问题的解决办法之一
    在Web.config中的sessionstate段中 加入cookieless=”true”。一般即可解决问题。

    2022年7月16日
  • 最全Pycharm教程(12)——Pycharm调试器之Java脚本调试

    最全Pycharm教程(12)——Pycharm调试器之Java脚本调试最全Pycharm教程(1)——定制外观  最全Pycharm教程(2)——代码风格  最全Pycharm教程(3)——代码的调试、运行  最全Pycharm教程(4)——有关Python解释器的相关配置  最全Pycharm教程(5)——Python快捷键相关设置  最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用  最全Pyc

    2022年8月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号