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

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

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

    內蒙古java團隊

    j2se,j2ee開發組
    posts - 139, comments - 212, trackbacks - 0, articles - 65
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Junit 教程

    Posted on 2006-12-21 11:26 帥子 閱讀(3365) 評論(0)  編輯  收藏 所屬分類: j2se技術專區

    以下是一份簡單的教程,向您展示如何使用Junit編寫和組織測試程序。

    ?


    一個簡單的測試用例。

    您是怎樣編寫測試代碼的呢?

    在調試器中使用表達式也許是最簡單的辦法。您可以不用重新編譯,就能改變調試器中的表達式,您甚至可以在您看到運行的對象實例后再決定如何改變;您也可以寫一些作為測試的表達式將結果打印到標準輸出。以上風格的測試都有一些局限,因為它們都需要人為的判斷來分析程序運行的結果;而且,呈現給您的也是一些不友好的輸出。您每次只能運行一個調試表達式,如果一個程序有太多的輸出語句將導致您很難找到您需要的結果。


    Junit?教程

    以下是一份簡單的教程,向您展示如何使用Junit編寫和組織測試程序。

    ?


    一個簡單的測試用例。

    您是怎樣編寫測試代碼的呢?

    在調試器中使用表達式也許是最簡單的辦法。您可以不用重新編譯,就能改變調試器中的表達式,您甚至可以在您看到運行的對象實例后再決定如何改變;您也可以寫一些作為測試的表達式將結果打印到標準輸出。以上風格的測試都有一些局限,因為它們都需要人為的判斷來分析程序運行的結果;而且,呈現給您的也是一些不友好的輸出。您每次只能運行一個調試表達式,如果一個程序有太多的輸出語句將導致您很難找到您需要的結果。

    JUnit Test不需要人的判斷去解釋,而且一次可以運行很多的測試。如果您需要測試某個東東的時候,您只要這么做即可:

    從TestCase繼承出一個子類。
    重寫runTest()方法。
    當您想檢查一個值時,調用assertTrue()方法,并傳入一個布爾量真值來代表測試通過。
    例如:為了測試同一貨幣單位的兩個錢數的和,我們包含了一個真實的值表示了這兩個錢數的和。如下:

    public void testSimpleAdd()

    {

    Money m12CHF = new Money(12,"CHF");

    Money m14CHF = new Money(14,"CHF");

    Money expected= new Money(26,"CHF");

    Money result = m12CHF.add(m14CHF)

    assertTrue(expected.equals(result));

    }

    如果,您要寫的測試與以前寫過的有些類似,那就寫一個模板。如果,您想運行多個測試,那就建立一個組。

    模板:

    當您有兩個或多個測試需要操作對象的同一或相近部分,該怎么辦?

    測試需要運行在部分內容已經確定的對象上,這些已知的部分被稱作測試模板。當您在寫測試的時候,您通常會發現您構建測試環境(已知部分)的時間要比您真正比較測試結果的時間要長。

    從某種程度上說,您如果仔細使用構造函數,您寫模板的時候也許更容易些。不管怎么樣,許多的保存內容來自共享的模板。通常,您能夠將這個模板應用到一些不同的測試上。每個測試用例將傳遞相近的信息或參數給模板,然后檢查不同的結果。

    當您寫一個通用的模板時,下面是您所要做的:

    從TestCase生成子類。
    給模板添加需要使用的實例變量。
    覆寫setUp()方法來實例化變量。
    覆寫tearDown()方法來釋放您在setUp()方法中建立的永久資源。
    例如:為了寫一些使用到 12瑞士法郎,14瑞士法郎,28美元不同組合的測試用例,那就首先寫一個模板:

    public class MoneyTest extends TestCase

    {

    private Money f12CHF;

    private Money f14CHF;

    private Money f28USD;

    protected void setUp()

    {

    f12CHF = new Money(12,"CHF");

    f14CHF = new Money(14,"CHF");

    f28USD = new Money(28,"USD");

    }

    }

    一旦您寫完了模板,那么,您就可以再寫隨意多的測試用例了。

    測試用例

    當您擁有了模板后,您是怎樣來寫和調用單獨的測試用例呢?

    當沒有模板的時候,寫測試用例是簡單的--只需覆寫TestCase的匿名子類中的runTest方法。有模板后,生成TestCase的子類來寫設置的代碼。然后,為單獨的測試用例寫匿名子類。然而,當寫過一些測試以后,您將注意到,很多的代碼行都浪費在語法上了。

    JUnit提供了一個簡練的方法來利用模板寫測試,如下:

    1,在包含模板的類中提供一個public void 方法,通常約定:方法名以test開頭。

    例如:為了測試Moeny 和MoneyBag的和,如下:

    public void testMoneyMoneyBag()

    {

    //[12 CHF] +[14 CHF] +[28 USD] == {[26 CHF] [28 USD] }

    Money bag[] = {f26CHF,f28USD};

    MoneyBag expected = new MoneyBag(bag);

    assertEquals(expected,f12CHF.add(f28USD.add(f14CHF)));

    }

    創建一個MoneyTest實例來運行這個用例的方法,如下:

    new MoneyTest("testMoneyMoneyBag")

    當這個測試運行時,這個參數名字被用來查找需要運行的方法。

    當您有多個測試用例時,可以將他們組織成(套件)suite.

    套件(suite)

    您怎樣才能一次運行多個測試?

    只要您有了兩個測試,您可能就希望一起運行他們。您當然可以每次只運行一個,但是很快您就會感到厭倦。JUnit提供了一個對象,TestSuite,以方便您一次完成任意多的測試一起運行。

    例如:只運行一個測試用例,您可能會執行:

    TestResult result = (new MoneyTest("testMoneyMoneyBag")).run();

    運行兩個測試用例,可以先產生一個套件(Suite),然后將這兩個測試用例包含其中,如下:

    TestSuite suite = new TestSuite();

    suite.addTest(new MoneyTest("testMoneyMoneyBag"));

    suite.addTest(new MoneyTest("testSimpleAdd"));

    TestResult result = suite.run();

    您可以采取另外的一種方式來一次運行多個測試用例,那就是讓JUnit自己從用例類(TestCase)中提取套件(Suite)。您可以通過將用例類(TestCase)的類名傳遞給套件(Suite)的構造函數來做到這點。

    TestSuite suite = new TestSuite(MoneyTest.class);

    TestResult result = suite.run();

    使用手工方法的多數情況是,我們希望套件中只包含測試用例的一個子集。其他情況,推薦使用自動提取測試套件方法,它能夠避免當您在新添加了一個測試用例后,還需要更改TestSuite(套件)產生代碼。

    TestSuites(套件)不僅可以包含測試用例,它還可以包含實現Test接口的任意對象。例如,您可以在您的代碼中產生一個套件,同時,我也產生一個,然后我們可以產生一個包含上述兩個套件的套件來一起運行。

    TestSuite suite = new TestSuite();

    suite.addTest(Kent.suite());

    suite.addTest(Erich.suite());

    TestResult result = suite.run();

    TestRunner(測試執行器)

    您怎樣運行測試,并收集執行后的結果?

    當您有了一個測試套件的時候,您就想運行它。Juint提供了工具來定義這個套件運行并顯示測試結果,您需使您的套件能被TestRunner(測試運行器)訪問;您可以使用靜態方法suite(),并且返回一個suite(套件)來完成這項工作。

    public static Test suite()

    {

    TestSuite suite = new TestSuite();

    suite.addTest(new MoneyTest("testMoneyEquals"));
    suite.addTest(new MoneyTest("testSimpleAdd"));
    return suite;


    }

    或則,采用自動提取的方式:

    public static Test suite() {
    return new TestSuite(MoneyTest.class);
    }

    如果,TestCase沒有定義suite方法,測試執行器將自動嘗試提取一個suite,并把以test開頭的方法裝入套件。

    Juint提供了圖形和文本兩種方式的測試執行器,啟動方式分別是:java junit.awtui.TestRunner 或則 java junit.swingui.TestRunner.

    圖形界面的執行方式提供了一個窗口,內容包括:

    一個輸入文本框,用來鍵入包含suite方法的類的名字。
    一個啟動測試的按鈕。
    一個進度條,如果測試失敗,他將從綠色變為紅色。
    一個包含失敗的測試的列表。
    當測試不通過時,juint在底部提供一個失敗測試的報表。juint區分失敗和錯誤。失敗是預期的,并且使用斷言assertions來做檢查的.錯誤是沒有預計到的,象數組索引越界。下圖包含了一個失敗的測試。

    當您改變代碼后,您必須重新啟動圖形界面窗口,這是繁瑣和耗時的。為了避免這種情況,JUnit 的AWT 和Swing UIs 可以利用junit.runner.LoadingTestCollector ,這個工具在測試的每次運行時都重新讀入您的類。如果您想關閉這個功能,去掉"reload classes"屬性選項即可。在幫助中您可以找到更詳細的信息。

    有一個批處理來啟動Junit.您可以在命令行中鍵入java junit.textui.TestRunner ,后跟包含suite方法的類名。這個方式得到一些終端文本輸出。另外一種啟動的方式是在您的TestCase類中,包含如下定義的main方法。

    例如:啟動MoneyTest的測試執行器,

    public static void main(String args[]) {
    junit.textui.TestRunner.run(suite());
    }


    當您定義了這個main方法后,您就可以在命令行中鍵入:java MoneyTest 來運行您的測試了。

    無論是圖形方式還是文本方式,都要確認在您的classpath上是否包含了junit.jar.


    在本文中,TestCase--測試用例,Suite--套件,TestRunner--測試執行器

    主站蜘蛛池模板: 亚洲国产电影在线观看| 亚洲欧洲日韩在线电影| 亚洲精品伦理熟女国产一区二区| 免费无码一区二区三区| 久久精品国产亚洲AV无码偷窥| 美女在线视频观看影院免费天天看| 国产AV无码专区亚洲AVJULIA| 中文字幕免费在线看线人动作大片 | 亚洲日韩中文无码久久| 国产99久久亚洲综合精品 | 在线成人a毛片免费播放| 中文字幕亚洲码在线| 免费观看毛片视频| 含羞草国产亚洲精品岁国产精品 | 99久久99久久精品免费观看| 久久亚洲私人国产精品| 国产精品色拉拉免费看| 亚洲熟妇av午夜无码不卡| 18禁超污无遮挡无码免费网站国产 | 免费成人av电影| 爱情岛论坛亚洲品质自拍视频网站 | 亚洲成在人天堂一区二区| 免费无码作爱视频| 麻豆亚洲AV永久无码精品久久| 国产曰批免费视频播放免费s| 亚洲欧美日韩自偷自拍| 免费在线观看视频a| 91精品成人免费国产| 亚洲毛片一级带毛片基地| 免费看的黄色大片| 91成人免费观看在线观看| 亚洲日韩中文字幕天堂不卡| 国产免费69成人精品视频| 两个人看www免费视频| 亚洲人成电影网站| 亚洲国产a级视频| 69av免费观看| 免费在线观看亚洲| 久久精品国产亚洲AV无码偷窥| 国产免费午夜a无码v视频| 1000部无遮挡拍拍拍免费视频观看|