关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Odin Inspector 系列教程 — List Drawer Settings Attribute

    Odin Inspector 系列教程 — List Drawer Settings AttributeListDrawerSettingsAttribute自定义数组或者列表绘制方式Odin已经重写对应的数组和列表的绘制[Title(“ListBasics”)][InfoBox(“现在可以拖动列表元素来重新排序并逐个删除它们,并且列表具有分页功能(尝试添加大量元素!)您仍然可以从项目视图一次将许多资产拖到列表中—只需将它们拖到列表本…

    2022年7月21日
    15
  • CentOS7关闭selinux[通俗易懂]

    1、为什么要关闭selinux初学者配置linux服务器时不成功,却没有头绪,那是因为在linux操作系统中默认开启了防火墙,SELinux也处于启动状态,一般状态为enforing。致使很多服务端口默认是关闭的。所以好多服务初学者明明配置文件正确,等验证时有时连ping也ping不通。建议初学者在未学到SELlinux与iptables之前,配置服务器把这两项都关掉。2、查看selinux状…

    2022年4月18日
    58
  • linux下压缩与解压缩-tar和zip_linux打包命令

    linux下压缩与解压缩-tar和zip_linux打包命令linux下tar和zip压缩效率图13总结:通过测试,在本次实验中我们得出的以下几点结论:1.小文件(最好是大于0.5M,如果文件太小,在进行tar打包并压缩或者zip压缩时,其占用的磁盘空间会比源文件大很多)在进行tar打包并压缩或者zip压缩时,其占用磁盘的大小不变;中等文件(100M左右的pdf格式文件),在进行tar打包并压缩或者zip压缩时时,大约节…

    2022年10月8日
    4
  • 六种进程间通信方式[通俗易懂]

    六种进程间通信方式[通俗易懂]前言开场小故事炎炎夏日,张三骑着单车去面试花了1小时,一路上汗流浃背。结果面试过程只花了5分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波1小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有…

    2022年10月11日
    4
  • 定时器循环彩灯实验c语言,定时器实验循环彩灯实验-单片机原理及应用实验报告…

    定时器循环彩灯实验c语言,定时器实验循环彩灯实验-单片机原理及应用实验报告…定时器实验循环彩灯实验-单片机原理及应用实验报告计算机与信息工程学院设计性实验报告专业:通信工程年级/班级:2011级2013—2014学年第一学期课程名称单片机原理及应用指导教师岳明本组成员学号姓名实验地点计科楼214实验时间周五3-4节项目名称定时器实验-循环彩灯实验实验类型设计性一、实验目的:1、学习8031内部计数器的使用和编程方法。2、进一步掌握中断…

    2022年7月16日
    14
  • 有哪些顶级水平的中国程序员?[通俗易懂]

    有哪些顶级水平的中国程序员?[通俗易懂]本文转载自启舰杂谈我们熟知的很多程序员都是国外的。那我们中国有没有顶尖级的程序员,出于好奇,我全网进行了搜罗,这里把我认为比较厉害的一些程序员展示给大家。篇幅有限,很多程序员我也没听过,所以就没有展示。排名顺序也没什么特别的,先看上谁,谁就排第一。比如,第一的尤雨溪单纯就是因为他长的帅如果你认为还有哪位大咖是你心目中的神,可以列出来,如果列的人多的话,我再搞一期给大家介绍介绍。一、尤雨溪江湖流传一个小故事:一款名叫Clear的软件,在…

    2022年10月11日
    4

发表回复

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

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