}
}
這就是mock對象的全部:偽裝出真實(shí)世界的某些行為,使你可以集中精力測試好自己的代碼。
內(nèi)容導(dǎo)航 4.好像有一些麻煩
如果每次都像上面那樣自己寫具體的mock對象,問題雖然解決了,但是好像有一些麻煩,不要著急,已經(jīng)有一些第三方現(xiàn)成的mock對象供我們使用了。使用Mock Object進(jìn)行測試,主要是用來模擬那些在應(yīng)用中不容易構(gòu)造(如HttpServletRequest必須在Servlet容器中才能構(gòu)造出來)或者比較復(fù)雜的對象(如JDBC中的ResultSet對象)從而使測試順利進(jìn)行的工具。目前,在Java陣營中主要的Mock測試工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微軟的.Net陣營中主要是Nmock,.NetMock等。
下面就以利用EasyMock模擬測試Servlet組件為例,代碼如下: 編譯并將其當(dāng)做一個Test Case運(yùn)行,會發(fā)現(xiàn)兩個測試方法均測試成功。我們可以看到easymock已經(jīng)幫助我們實(shí)現(xiàn)了一些servlet組件的mock對象,這樣我們就可以擺脫web容器和servlet容器來輕松的測試servlet了。
import org.easymock.*;
import junit.framework.*;
import javax.servlet.http.*;
public class MockRequestTest extends TestCase{
private MockControl control;
private HttpServletRequest mockRequest;
public void testMockRequest(){
//創(chuàng)建一個Mock HttpServletRequest的MockControl對象
control = MockControl.createControl(HttpServletRequest.class);
//獲取一個Mock HttpServletRequest對象
mockRequest = (HttpServletRequest) control.getMock();
//設(shè)置期望調(diào)用的Mock HttpServletRequest對象的方法
mockRequest.getParameter("name");
//設(shè)置調(diào)用方法期望的返回值,并指定調(diào)用次數(shù)
//以下后兩個參數(shù)表示最少調(diào)用一次,最多調(diào)用一次
control.setReturnValue("kongxx" ,1 ,1);
//設(shè)置Mock HttpServletRequest的狀態(tài),
//表示此Mock HttpServletRequest對象可以被使用
control.replay();
//使用斷言檢查調(diào)用
assertEquals("kongxx",mockRequest.getParameter("name"));
//驗(yàn)證期望的調(diào)用
control.verify();
}
}
編譯并將其當(dāng)做一個Test Case運(yùn)行,會發(fā)現(xiàn)兩個測試方法均測試成功。我們可以看到easymock已經(jīng)幫助我們實(shí)現(xiàn)了一些servlet組件的mock對象,這樣我們就可以擺脫web容器和servlet容器來輕松的測試servlet了。
5.底層技術(shù)是什么?
讓我們來回憶一下,如果用戶使用C++和java的程序的生成,C++在最后的階段還需要連接才能生成一個整體程序,這在靈活性與java源代碼的機(jī)制是不能比的,java的各個類是獨(dú)立的,打包的那些類也是獨(dú)立的,只有在加載進(jìn)去才進(jìn)行連接,這在代碼被加載進(jìn)去的時候,我們還可以執(zhí)行很多的動作,如插入一些相關(guān)的業(yè)務(wù)需求,這也是AOP的一個焦點(diǎn),javassit代碼庫的實(shí)現(xiàn)類似于這,正是利用這些,所以用java實(shí)現(xiàn)Mock對象是很簡單的。
相關(guān)推薦:2011計算機(jī)等級考試二級C輔導(dǎo)實(shí)例編程匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |