<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    duansky'weblog

    統(tǒng)計(jì)

    留言簿(3)

    友情鏈接

    閱讀排行榜

    評(píng)論排行榜

    JUnit基本教程

    使用目的

    ?????? junitjava中書寫unit testframework,目前一些流行的unit test工具大都都是在junit上擴(kuò)展而來的。目前它的版本是junit3.8.1,可以從www.junit.org上下載。

    Eclipse中配置junit

    在要使用JUNITproject名上,點(diǎn)擊properties--java build path-libraries, 點(diǎn)擊Add External JARs,JUNIT包點(diǎn)上就行了. 并在需要測試的項(xiàng)目上新建junit test case

    用法

    1.?????? 基本使用步驟,Junit的使用非常簡單,它的基本使用步驟:

    -????????? 創(chuàng)建,從junit.framework.TestCase派生unit test需要的test case

    -????????? 書寫測試方法,提供類似于如下函數(shù)簽名的測試方法:

    public void testXXXXX();

    -????????? 編譯,書寫完test case后,編譯所寫的test case

    -????????? 運(yùn)行,啟動(dòng)junit test runner,來運(yùn)行這個(gè)test case

    Junit提供了2個(gè)基本的test runner:字符界面和圖形界面。啟動(dòng)命令分別如下:

    a 圖形界面:

    java junit.swingui.TestRunner XXXXX

    b 字符界面:

    java junit.textui.TestRunner XXXXX

    2.?????? 使用例子:

    import?junit.frmework.TestCase;?

    public?class?TestSample?extends?TestCaset{?

    ??????????????
    public?void?testMethod1(){?

    ?????????????????????assertTrue(?
    true);?

    ??????????????}
    ?
    }
    ?

    3.?????? setUptearDown,這兩個(gè)函數(shù)是junit framework中提供初始化和反初始化每個(gè)測試方法的。setUp在每個(gè)測試方法調(diào)用前被調(diào)用,負(fù)責(zé)初始化測試方法所需要的測試環(huán)境;tearDown在每個(gè)測試方法被調(diào)用之后被調(diào)用,負(fù)責(zé)撤銷測試環(huán)境。它們與測試方法的關(guān)系可以描述如下:

    ???? 測試開始 -> setUp -> testXXXX -> tearDown ->測試結(jié)束

    4.?????? 使用例子:

    import?junit.frmework.TestCase;?

    public?class?TestSample?extends?TestCaset{?

    ??????????????
    protected?void?setUp(){?

    ?????????????????????
    //初始化……?

    }
    ?

    ??????????????
    public?void?testMethod1(){?

    ?????????????????????assertTrue(?
    true);?

    }
    ?


    potected?
    void?tearDown(){?

    ???????
    //撤銷初始化……?

    }
    ?}
    ?

    5.?????? 區(qū)分failexception

    -????????? fail,期望出現(xiàn)的錯(cuò)誤。產(chǎn)生原因:assert函數(shù)出錯(cuò)(如assertFalse(true));fail函數(shù)產(chǎn)生(如fail(……))。

    -????????? exception,不期望出現(xiàn)的錯(cuò)誤,屬于unit test程序運(yùn)行時(shí)拋出的異常。它和普通代碼運(yùn)行過程中拋出的runtime異常屬于一種類型。

    對(duì)于assertfail等函數(shù)請(qǐng)參見junitjavadoc

    6.?????? 使用例子:

    import?junit.frmework.TestCase;?

    public?class?TestSample?extends?TestCaset{?

    ??????????????
    protected?void?setUp(){?

    ?????????????????????
    //初始化……?

    }
    ?

    ??????????????
    public?void?testMethod1(){?

    ?????????????????????……?

    ?????????????????????
    try{?

    ????????????????????????????
    boolean?b=?……?

    ????????????????????????????assertTrue(?b);?

    ????????????????????????????
    throw?new?Exception(?“This?is?a?test.”);?

    ????????????????????????????fail(?“Unable?point.”);?????
    //不可能到達(dá)?

    ?????????????????????}
    catch(Exception?e){?

    ????????????????????????????fail(?“Yes,?I?
    catch?u”);?//應(yīng)該到達(dá)點(diǎn)?

    }
    ?

    ……?

    }
    ?

    potected?
    void?tearDown(){?

    ???????
    //撤銷初始化……?

    }
    ?
    }
    ?

    7.?????? 組裝TestSuite,運(yùn)行更多的test。在junit中,TestTestCaseTestSuite三者組成了composiste pattern。通過組裝自己的TestSuite,可以完成對(duì)添加到這個(gè)TestSuite中的所有的TestCase的調(diào)用。而且這些定義的TestSuite還可以組裝成更大的TestSuite,這樣同時(shí)也方便了對(duì)于不斷增加的TestCase的管理和維護(hù)。

    ?????? 它的另一個(gè)好處就是,可以從這個(gè)TestCase樹的任意一個(gè)節(jié)點(diǎn)(TestSuiteTestCase)開始調(diào)用,來完成這個(gè)節(jié)點(diǎn)以下的所有TestCase的調(diào)用。提高了unit test的靈活性。

    8.?????? 使用例子:

    ?

    import?junit.framework.Test;?

    import?junit.framework.TestSuite;?

    public?class?TestAll{?

    public?class?TestAll{?

    ??????????????
    //定義一個(gè)suite,對(duì)于junit的作用可以視為類似于java應(yīng)用程序的main。?

    ????
    public?static?Test?suite(){?

    ????????TestSuite?suite?
    =?new?TestSuite("Running?all?tests.");?

    ????????suite.addTestSuite(?TestCase1.
    class);?

    ????????suite.addTestSuite(?TestCase2.
    class);?

    ????????
    return?suite;?

    ????}
    ?

    }
    ?

    ?

    運(yùn)行同運(yùn)行單獨(dú)的一個(gè)TestCase是一樣的,參見step 1 “運(yùn)行

    9.?????? 使用Ant junit task。我們除了使用java來直接運(yùn)行junit之外,我們還可以使用junit提供的junit taskant結(jié)合來運(yùn)行。涉及的幾個(gè)主要的ant task如下:

    -????????? <junit>,定義一個(gè)junit task

    -????????? <batchtest>,位于<junit>中,運(yùn)行多個(gè)TestCase

    -????????? <test>,位于<junit>中,運(yùn)行單個(gè)TestCase

    -????????? <formatter>,位于<junit>中,定義一個(gè)測試結(jié)果輸出格式

    -????????? <junitreport>,定義一個(gè)junitreport task

    -????????? <report>,位于<junitreport>中,輸出一個(gè)junit report

    具體的語法請(qǐng)參見相關(guān)文檔。

    10.?? 使用例子:

    ?

    <junit?printsummary="yes"?haltonfailure="no">?

    ????
    <classpath>?

    ????????
    <path?refid="classpath"/>?

    ????????
    <pathelement?location="${dist.junit}"/>?

    ????
    </classpath>?

    ????
    <formatter?type="brief"?usefile="false"/>?

    ????
    <formatter?type="xml"/>?

    ????
    <batchtest?todir="${doc.junitReport}">?

    ????????
    <fileset?dir="${dist.junit}"?includes="**/*Test.class"?/>?

    ????
    </batchtest>?

    </junit>?

    <junitreport?todir="${doc.junitReport}">?

    ????
    <fileset?dir="${doc.junitReport}">?

    ????????
    <include?name="TEST*-*.xml"/>?

    ????
    </fileset>?

    ????
    <report?format="frames"?styledir="${junit.styleDir}"?todir="${doc.junitReport}"/>?

    </junitreport>?

    檢查表

    ?????? junit的使用并不很難,然而要書寫一個(gè)好的TestCase卻并非易事。一個(gè)不好的TestCase往往是既浪費(fèi)了時(shí)間,也起不了實(shí)際的作用。相反,一個(gè)好的TestCase,不僅可以很好的指出代碼中存在的問題,而且也可以作為代碼更準(zhǔn)確的文檔,同時(shí)還在持續(xù)集成的過程中起非常重要的作用。在此給出書寫TestCase時(shí)需要注意的幾點(diǎn):

    -????????? 測試的獨(dú)立性:一次只測試一個(gè)對(duì)象,方便定位出錯(cuò)的位置。這有2層意思:一個(gè)TestCase,只測試一個(gè)對(duì)象;一個(gè)TestMethod,只測試這個(gè)對(duì)象中的一個(gè)方法。

    -????????? 給測試方法一個(gè)合適的名字。

    -????????? assert函數(shù)中給出失敗的原因,如:assertTrue( “… should be true”,? ……),方便查錯(cuò)。在這個(gè)例子中,如果無法通過assertTrue,那么給出的消息將被顯示。在junit中每個(gè)assert函數(shù)都有第一個(gè)參數(shù)是出錯(cuò)時(shí)顯示消息的函數(shù)原型。

    -????????? 測試所有可能引起失敗的地方,如:一個(gè)類中頻繁改動(dòng)的函數(shù)。對(duì)于那些僅僅只含有getter/setter的類,如果是由IDE(如Eclipse)產(chǎn)生的,則可不測;如果是人工寫,那么最好測試一下。

    -????????? setUptearDown中的代碼不應(yīng)該是與測試方法相關(guān)的,而應(yīng)該是全局相關(guān)的。如針對(duì)與測試方法AB,在setUptearDown中的代碼應(yīng)該是AB都需要的代碼。

    -????????? 測試代碼的組織:相同的包,不同的目錄。這樣,測試代碼可以訪問被測試類的protected變量/方法,方便測試代碼的編寫。放在不同的目錄,則方便了測試代碼的管理以及代碼的打包和發(fā)布。一個(gè)例子如下:

    src?? <=源代碼根目錄

    ?|---com

    ???? |---mod1

    ???????? |---class1

    junit?? <=測試代碼根目錄

    ?|---com

    ???? |---mod1

    ???????? |---class1

    來源:http://autumn200005.blogchina.com/blog/3699946.html

    posted on 2007-11-26 10:59 duansky 閱讀(291) 評(píng)論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 午夜免费福利网站| 免费看黄的成人APP| 亚洲一级免费视频| 亚洲乱码中文字幕小综合| 成人免费无码大片A毛片抽搐| 国内成人精品亚洲日本语音| 国产亚洲精品精品国产亚洲综合| 91禁漫免费进入| 美女视频黄频a免费| 亚洲第一页在线视频| 免费一级毛片正在播放| 久久成人免费大片| 亚洲av永久中文无码精品| 亚洲V无码一区二区三区四区观看| 欧美好看的免费电影在线观看| 中文在线观看免费网站| 亚洲偷偷自拍高清| 免费人妻无码不卡中文字幕18禁| 免费人成在线观看网站品爱网日本| 国产乱子影视频上线免费观看| 91频在线观看免费大全| 花蝴蝶免费视频在线观看高清版 | 亚洲精品WWW久久久久久| 8090在线观看免费观看| 久久成人国产精品免费软件| 操美女视频免费网站| 免费又黄又爽的视频| 亚洲中文字幕无码一久久区| 国产美女无遮挡免费视频网站| 久久免费看黄a级毛片 | 亚洲中文字幕久久精品无码VA| 亚洲av福利无码无一区二区| 免费一级做a爰片久久毛片潮喷| 亚洲免费在线观看| 亚洲AV永久无码精品一百度影院| 亚洲妓女综合网99| 亚洲AV成人无码久久精品老人| 亚洲综合久久1区2区3区| 色欲色欲天天天www亚洲伊| 亚洲AV无码专区亚洲AV桃| 国产特黄特色的大片观看免费视频|