日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

24分钟学会用JMock进行单元测试

發(fā)布時(shí)間:2024/4/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 24分钟学会用JMock进行单元测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://tech.it168.com/jd/2008-01-12/200801120506372.shtml

【IT168 技術(shù)文檔】不管是測(cè)試驅(qū)動(dòng)開發(fā)或者是其它的開發(fā)模式,都會(huì)需要對(duì)代碼進(jìn)行單元測(cè)試,對(duì)于關(guān)聯(lián)依賴關(guān)系少或者比較簡(jiǎn)單的類來說,直接使用JUnit就可以輕松的完成測(cè)試工作,但是對(duì)于關(guān)聯(lián)到其它比較復(fù)雜的類或?qū)\(yùn)行環(huán)境有要求的類的單元測(cè)試,比如ejb,servlet或Dao等,測(cè)試起來或者需要配置特定的環(huán)境,或者十分耗時(shí),給單元測(cè)試造成困難。在這里介紹使用JMock來模擬那些不需要測(cè)試的類,幫助完成有單元測(cè)試。

  例如,有這樣兩個(gè)類,一個(gè)是Dao.java,用于數(shù)據(jù)庫(kù)訪問成操作的,一個(gè)是Business.java,需要調(diào)用Dao進(jìn)行業(yè)務(wù)處理。Dao.java是已經(jīng)在有數(shù)據(jù)庫(kù)的環(huán)境測(cè)試通過的,現(xiàn)在需要測(cè)試Business.java。通常情況下,我們需要在測(cè)試環(huán)境配置好數(shù)據(jù)庫(kù)連接環(huán)境,并且需要準(zhǔn)備數(shù)據(jù)后,才可以開始Business.java的測(cè)試,現(xiàn)在如果通過JMock就可以不配置數(shù)據(jù)庫(kù)環(huán)境,也可以完成測(cè)試。

  JMock網(wǎng)站鏈接:http://www.jmock.org

  //Dao.java package com.raistlin.test.jmockpublic class Dao{public Dao(){}public List execute(String sql){//數(shù)據(jù)庫(kù)操作... }}//Business.java package com.raistlin.test.jmockpublic 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.jmockimport 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 Mock(Dao.class);business = new Business();}protected void tearDown() throws Exception{mockDao = null;business = null;super.tearDown();}public void testOperate(){ArrayList stubList = new ArrayList();stubList.add("test");// 定義Mock劇本 mockDao.expects(once())// 期待次數(shù) .method("execute")// 調(diào)用方法 .with(eq("select * from tbl_test"))// 傳入?yún)?shù)等于 .will(this.returnValue(stubList));// 返回對(duì)象 Dao dao = (Dao) mockDao.proxy();business.setDao(dao);assertEquals(business.operate(), "test");}}

  在工程中導(dǎo)入jmock-1.0.1.jar ,jmock-cglib-1.0.1.jar ,cglib-full-2.0.jar 三個(gè)jar包,然后在JUnit中執(zhí)行BusinessTest.java,會(huì)顯示綠棒,這樣,在沒有數(shù)據(jù)庫(kù)的情況下,單元測(cè)試成功。

  使用JMock模擬類的條件:

  1、要有無參數(shù)的構(gòu)造器;

  2、構(gòu)造器是public;

  這樣對(duì)于private的構(gòu)造器或單例模式的類應(yīng)該是無法模擬了。這樣就要求我們養(yǎng)成針對(duì)接口編程的習(xí)慣,對(duì)接口用JMock進(jìn)行模擬將不受這些限制。只需要將

  import org.jmock.cglib.MockObjectTestCase;

  import org.jmock.cglib.Mock;

  改為

  import org.jmock.MockObjectTestCase;

  import org.jmock.Mock;

  即可。

  對(duì)于Mock類,有很多API可供使用,比如:

  isA(Class clz) 表示為某個(gè)類

  isVoid() 將will()換成isVoid()表示無返回值

  詳細(xì)API可以參考一下DOC,還會(huì)找到很多有用的東西。

?

總結(jié)

以上是生活随笔為你收集整理的24分钟学会用JMock进行单元测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。