建体彩网|中彩网双色球连号|
?
快捷搜索:  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,還會找到很多有用的器械。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
北京时时彩规律破解教程 大嘴棋牌刨幺 刮刮乐中奖 青海快三 内蒙古快三开奖结果查询 17157足彩结果奖金 小六足球比分即时赔率 微乐麻将视频软件下载 欧乐棋牌下载 体彩6+1