单元测试这个东西很神奇,最早是从国外引入的,世面上也存在了很多开源的单元测试软件,那么它到底有什么优缺点呢?下面就列出来瞧瞧看看,并附上一些我自己的看法。
阅读全文…
标签存档: test unit
对于单元测试的粗浅看法
jmock使用【转】
JMockit 使用
1.使用介绍
传统mock方法的限制:
JDK Proxy必须实现接口
Cglib Proxy的class和方法不能是final限定的
对于静态方法无能为力
对非public方法无能为力,或者需要花比较大的代价进行反射处理
比较依赖于Ioc机制,对于new或工厂类管理的bean无法进行有效的测试
JMockit优点
JMockit项目基于 Java 5 SE 的 java.lang.instrument 机制,内部使用 ASM 库来修改Java的Bytecode,是一个能帮我们解决以上问题的轻量级框架,它允许你动态的改变已有的方法,这主要基于java 1.5的Instrumentation框架,允许你重定义private,static and final方法,甚至是no-arg constructors都能够并轻易的重定义,这样便可以使得JMockit能够适应几乎所有的设计。
使用mock的场景
真实对象有着不确定的行为
真实对象很难创建
真实对象的行为很难触发
真实对象响应缓慢
真实对象是用户界面
真实对象使用了回调机制
真实对象尚未存在
而对应的mock具有下面的功能
替换远程对象,如ESB、WEB Service对象等
替换复杂的对象
方便模块化开发
2.JMockit原理
JMockit是依赖JDK提供的instrument机制及ASM来实现其功能的,基本原理是这样的:
在JDK装入类的时候,由于我们设置也-javaagent,JDK会查看这个jar包的/META-INF/MANIFEST.MF文件,找到Premain-Class并加载这个类,然后调用这个类的premain方法将Instrument实现设置进去,然后JMockit就可以在类加载的时候做transformer,在做transformer的时候会通过ASM来动态改变字节码。
如果大家想有更深入的也解请在这里下载源代码。
阅读全文…