輕松

          記述我學(xué)習(xí)java的里程

          常用鏈接

          統(tǒng)計

          積分與排名

          友情鏈接

          最新評論

          如何使用Junit編寫和組織測試程序

          Junit 教程(Kent Beck, Erich Gamma)--Fanto

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

          一個簡單的測試用例。

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

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

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

          1. 從TestCase繼承出一個子類。
          2. 重寫runTest()方法。
          3. 當您想檢查一個值時,調(diào)用assertTrue()方法,并傳入一個布爾量真值來代表測試通過。

          例如:為了測試同一貨幣單位的兩個錢數(shù)的和,我們包含了一個真實的值表示了這兩個錢數(shù)的和。如下:

          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));

          }

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

           

          模板

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

          測試需要運行在部分內(nèi)容已經(jīng)確定的對象上,這些已知的部分被稱作測試模板。當您在寫測試的時候,您通常會發(fā)現(xiàn)您構(gòu)建測試環(huán)境(已知部分)的時間要比您真正比較測試結(jié)果的時間要長。

          從某種程度上說,您如果仔細使用構(gòu)造函數(shù),您寫模板的時候也許更容易些。不管怎么樣,許多的保存內(nèi)容來自共享的模板。通常,您能夠?qū)⑦@個模板應(yīng)用到一些不同的測試上。每個測試用例將傳遞相近的信息或參數(shù)給模板,然后檢查不同的結(jié)果。

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

          1. 從TestCase生成子類。
          2. 給模板添加需要使用的實例變量。
          3. 覆寫setUp()方法來實例化變量。
          4. 覆寫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");

                   }

          }

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

          測試用例

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

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

          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)));

          }

          創(chuàng)建一個MoneyTest實例來運行這個用例的方法,如下:

                   new MoneyTest("testMoneyMoneyBag")

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

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

          套件(suite)

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

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

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

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

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

                   TestSuite suite = new TestSuite();

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

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

                   TestResult result = suite.run();

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

                   TestSuite suite = new TestSuite(MoneyTest.class);

                   TestResult result = suite.run();

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

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

                   TestSuite suite = new TestSuite();

                   suite.addTest(Kent.suite());

                   suite.addTest(Erich.suite());

                   TestResult result = suite.run();

          TestRunner(測試執(zhí)行器)

          您怎樣運行測試,并收集執(zhí)行后的結(jié)果?

          當您有了一個測試套件的時候,您就想運行它。Juint提供了工具來定義這個套件運行并顯示測試結(jié)果,您需使您的套件能被TestRunner(測試運行器)訪問;您可以使用靜態(tài)方法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方法,測試執(zhí)行器將自動嘗試提取一個suite,并把以test開頭的方法裝入套件。

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

          圖形界面的執(zhí)行方式提供了一個窗口,內(nèi)容包括:

          1. 一個輸入文本框,用來鍵入包含suite方法的類的名字。
          2. 一個啟動測試的按鈕。
          3. 一個進度條,如果測試失敗,他將從綠色變?yōu)榧t色。
          4. 一個包含失敗的測試的列表。

          當測試不通過時,juint在底部提供一個失敗測試的報表。juint區(qū)分失敗和錯誤。失敗是預(yù)期的,并且使用斷言assertions來做檢查的.錯誤是沒有預(yù)計到的,象數(shù)組索引越界。下圖包含了一個失敗的測試。

           

           

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

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

          例如:啟動MoneyTest的測試執(zhí)行器,

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

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

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

           

          在本文中,TestCase--測試用例,Suite--套件,TestRunner--測試執(zhí)行器,————譯者

          posted on 2005-01-21 17:30 輕松 閱讀(4227) 評論(0)  編輯  收藏 所屬分類: Junit相關(guān)

          主站蜘蛛池模板: 宜丰县| 茶陵县| 台湾省| 镇雄县| 永兴县| 台南市| 岳普湖县| 乐安县| 亳州市| 河东区| 山阳县| 许昌市| 禄劝| 花垣县| 图片| 高州市| 娄烦县| 吉首市| 石楼县| 灵璧县| 阿坝| 静乐县| 玉林市| 天峻县| 南通市| 天门市| 那坡县| 太白县| 昌吉市| 科技| 宣武区| 伊金霍洛旗| 金门县| 公主岭市| 商河县| 富阳市| 温州市| 社会| 临澧县| 安福县| 洛南县|