JMOCK网站上只提供JMOCK1.2以后,当使用JMOCK1.2时,怎么也运行不了,发现无法使用它来模拟类,只能模拟接口,即使加CGLIB也起不了作用,后来发现作者使用的是JMOCK1.01
JMOCK的每个版本变化太大,这也不太利于它的发展。JMOCK1.01中有一个cglib-full-2.0.jar。它可以用来模拟类。
在工程中导入jmock-1.0.1.jar ,jmock-cglib-1.0.1.jar ,cglib-full-2.0.jar 三个jar包,然后在JUnit中执行BusinessTest.java,会显示绿棒,这样,在没有数据库的情况下,单元测试成功。
使用JMock模拟类的条件:
1、要有无参数的构造器;
2、构造器是public;
这样对于private的构造器或单例模式的类应该是无法模拟了。这样就要求我们养成针对接口编程的习惯,对接口用JMock进行模拟将不受这些限制。只需要将
[b]import org.jmock.cglib.MockObjectTestCase;
import org.jmock.cglib.Mock;[/b] 改为
import org.jmock.MockObjectTestCase;
import org.jmock.Mock;
即可。
对于Mock类,有很多API可供使用,比如:
isA(Class clz) 表示为某个类
isVoid() 将will()换成isVoid()表示无返回值
详细API可以参考一下DOC,还会找到很多有用的东西。
JMOCK的每个版本变化太大,这也不太利于它的发展。JMOCK1.01中有一个cglib-full-2.0.jar。它可以用来模拟类。
在工程中导入jmock-1.0.1.jar ,jmock-cglib-1.0.1.jar ,cglib-full-2.0.jar 三个jar包,然后在JUnit中执行BusinessTest.java,会显示绿棒,这样,在没有数据库的情况下,单元测试成功。
使用JMock模拟类的条件:
1、要有无参数的构造器;
2、构造器是public;
这样对于private的构造器或单例模式的类应该是无法模拟了。这样就要求我们养成针对接口编程的习惯,对接口用JMock进行模拟将不受这些限制。只需要将
[b]import org.jmock.cglib.MockObjectTestCase;
import org.jmock.cglib.Mock;[/b] 改为
import org.jmock.MockObjectTestCase;
import org.jmock.Mock;
即可。
对于Mock类,有很多API可供使用,比如:
isA(Class clz) 表示为某个类
isVoid() 将will()换成isVoid()表示无返回值
详细API可以参考一下DOC,还会找到很多有用的东西。