快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱h188下载app:24分钟学会用JMock进行单元测试



不管是测试驱动开拓或者是其它的开拓模式,都邑必要对代码进行单元测试,对付关联依附关系少或者对照简单的类来说,直接应用JUnit就可以轻松的完成测试事情,然则对付关联到其它对照繁杂的类或对运行情况有要求的类的单元测试,比如ejb,servlet或Dao等,测试起来或者必要设置设置设备摆设摆设特定的情况,或者十分耗时,给单元测试造成艰苦。在这里先容应用JMock来模拟那些不必要测试的类,赞助完成有单元测试。

例如,有这样两个类,一个是Dao.java,用于数据库造访成操作的,一个是Business.java,必要调用Dao进行营业处置惩罚。Dao.java是已经在稀有据库的情况测试经由过程的,现在必要测试Business.java。平日环境下,我们必要在测试情况设置设置设备摆设摆设好数据库连接情况,并且必要筹备数据后,才可以开始Business.java的测试,现在假如经由过程JMock就可以不设置设置设备摆设摆设数据库情况,也可以完成测试。

JMock网站链接:http://www.jmock.org

//Dao.java

package com.raistlin.test.jmock

public class Dao

{

public Dao()

{

}

public List execute(String sql)

{

//数据库操作...

}

}

//Business.java

package com.raistlin.test.jmock

public class Business

{

private Dao dao ;

public void setDao(Dao dao)

{

this.dao = dao;

}

public String operate()

{

List list = dao.execute("select * from tbl_test");

return (String) list.get(0);

}

}

//BusinessTest.java

package com.raistlin.test.jmock

import org.jmock.cglib.MockObjectTestCase;

import org.jmock.cglib.Mock;

public class BusinessTest extends MockObjectTestCase

{

private Mock mockDao = null;

private Business business = null;

protected void setUp() throws Exception

{

super.setUp();

mockDao = new Moc和记娱h188下载appk(Dao.class);

business = new Business();

}

protected void tearDown() throws Exception

{

mockDao = null;

business = null;

super和记娱h188下载app.tearDown();

}

public void testOperate()

{

ArrayList stubList = new ArrayList();

stubList.add("test");和记娱h188下载app

// 定义Mock剧本

mockDao.expects(once())// 等候次数

.method("execute")// 调用措施

.with(eq("select * from tbl_test"))// 传入参数即是

.will(th和记娱h188下载appis.returnValue(stubList));// 返回工具

Dao dao = (Dao) mockDao.proxy();

business.setDao(dao);

assertEquals(business.operate(), "test");

}

}

在工程中导入jmock-1.0.1.jar ,jmock-cglib-1.0.1.jar ,cglib-full-2.0.jar 三个jar包,然后在JUnit中履行BusinessTest.和记娱h188下载appjava,会显示绿棒,这样,在没稀有据库的环境下,单元测试成功。

应用JMock模拟类的前提:

1、要有无参数的构造器;

2、构造器是public;

这样对付private的构造器或单例模式的类应该是无法模拟了。这样就要求我们养成针对接口编程的习气,对接口用JMock进行模拟将不受这些限定。只必要将

import org.jmock.cglib.MockObjectTestCase;

import org.jmock.cglib.Mock;

改为

import org.jmock.MockObjectTestCase;

import org.jmock.Mock;

即可。

对付Mock类,有很多API可供应用,比如:

isA(Class clz)表示为某个类

isVoid()将will()换成isVoid()表示无返回值

具体API可以参考一下DOC,还会找到很多有用的器械。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: