熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

JBuilder2005單元測試之JUnit框架

2013-11-23 20:34:43  來源: Java開源技術 

  簡單的框架
  
  JUnit是由Erich Gamma和Kent Beck開發的開源測試框架JBuilder集成了這個框架並對此做了擴展JUnit之所以流行並為廣大的開發人員所推崇一是因為它實戰性強功能強大二是因為它實在簡單一個產品或框架要能有生命力最好都具備這樣的特點
  
  簡單地講這個框架提供了許多斷言(assert)方法允許你設置測試的規則assertEquals()assertNull()assertNotSame()assertTrue()等方法一個測試用例包括了多個斷言當運行測試用例後JUnit運行器會報告哪些斷言沒有通過開發人員就可順籐摸瓜搞個水落石出了而傳統的測試方法需要將期望的結果用諸如Systemoutprintln()等語句將過程信息打印到控制台或日志中由開發人員觀察輸出信息以判斷是否正確現在這種觀察的工作由JUnit的那些assertXxx()方法自動完成
  
  JUnit的測試框架類結構很簡單主要由個類組成其類圖關系如下圖所示
   
  圖 錯誤!文檔中沒有指定樣式的文字JUnit測試框架類結構
  
  ·junitframeworkTest測試接口
  
  ·junitframeworkTestCase測試用例類業務類的測試用例類只需要承繼這個TestCase根據情況編寫若干個public void testXxx()方法在方法中通過assertYyy()定制若干測試規則就可以了
  
  ·junitframeworkTestSuite測試套件類它可以將多個測試用例類捆綁在一起運行也可以捆綁另一個測試套件
  
  測試固件(Fixture)
  
  一個測試用例可以包含若干個testXxx()測試方法測試用例測試一個或多個類API接口的正確性當然在調用類API時需要事先創建這個類的對象及一些關聯的對象這組對象就稱為測試固件(Fixture)相當於測試用例的工作對象
  
  我們在前面說過一個測試用例類可以包含多個testXxx()方法在運行時每個測試方法都對應一個測試用例類的實例當然你可以在具體的testXxx()方法裡聲明並實例化業務類的實例在測試完成後再銷毀它們但是這麼一來你就要在每個testXxx()方法中都重復這些代碼因為TestCase實例被運行時依照以下步驟運行
  
  .創建測試用例的實例
  
  .調用setUp()方法執行一些初始化工作
  
  .運行testXxx()測試方法
  
  .調用tearDown()方法執行銷毀對象的工作
  
  如果測試用例類中有多個testXxx()方法且它們都需要使用到相同的一組對象我們可以在setUp()中實例化這組對象並在tearDown()中銷毀它們要編寫測試固件依照以下步驟進行
  
  .創建TestCase類的子類
  
  .在子類中聲明若干個測試所用的對象
  
  .覆蓋setUp()方法在方法中實例化這些對象
  
  .覆蓋tearDown()方法釋放這些對象的資源
  
  如下面即是一個簡單的測試固件
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字測試固件
  
   public class MoneyTest extends TestCase
   {
    private Money fCHF;//瑞士法郎
    private Money fCHF; //瑞士法郎
    private Money fUSD; //美國美元
    protected void setUp() {
     fCHF= new Money( CHF);
     fCHF= new Money( CHF);
     fUSD= new Money( USD);
    }
    protected void tearDown(){}
   }
  
  第~行聲明了個Money類對象(測試固件)在setUp()方法中實例化這個對象(第~行)由於這些對象可以被垃圾進行直接回收所以在tearDown()中不做任何操作
  
  測試用例(TestCase)
  
  有了測試固件就可以開始編寫測試用例的測試方法了當然你也可不需要測試固件而直接編寫測試用例方法下面我們在測試固件的基礎上添加測試用例方法testMoneyBag()代碼如下所示
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字測試用例方法
  
   public class MoneyTest extends TestCase
   {
    private Money fCHF;//瑞士法郎
    private Money fCHF; //瑞士法郎
    private Money fUSD; //美國美元
    protected void setUp() {
     fCHF= new Money( CHF);
     fCHF= new Money( CHF);
     fUSD= new Money( USD);
   }
    public void testMoneyBag()
    {
     Money bag[]= { fCHF fUSD };
     MoneyBag expected= new MoneyBag(bag);
     assertEquals(expected fCHFadd(fUSDadd(fCHF)));
    }
    protected void tearDown(){}
   }
  
  測試方法都必須以test為前綴且必須是public void的運行器以此為反射查找規則找到這些測試用例方法在一個方法中可以包括多個assertYyy()方法每個assertYyy()方法都是一個測試規則像第行的assertYyy()斷言方法即為測試Money的add()方法和MoneyBag類正確性的測試規則
  
  你可以在MoneyTest中添加多個public void testXxx()方法運行器為每個方法生成一個測試用例實例分別運行
  
  測試套件(TestSuite)
  
  如果每次只能運行一個測試用例那麼又陷入了我們前面所談到的傳統測試的窘境手工去運行一個個測試用例測試套件專門為解決這一問題而來它通過TestSuite對象將多個測試用例組裝成到一個測試套件則測試套件批量運行需要特殊指出的是可以把一個測試套件整個添加到另一個測試套件中就象小筐裝進大筐裡變成一個箧一樣
  
  測試套件類也通過承繼TestCase類實現只不過它提供了一個public static Test suite()靜態方法在該方法中將多個測試用例捆綁組裝在一起一個典型的測試套件代碼如下所示
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字測試套件
  
   public class MoneyTestSuite extends TestCase
   {
    public TestSuite(String s)
    {
     super(s);
    }
    public static Test suite()
    {
     TestSuite suite = new TestSuite();
    suiteaddTestSuite(MoneyTestclass);
     suiteaddTestSuite(MoneyBagclass);
     return suite;
    }
   }
  
  在第行中聲明並實例化了一個TestSuite在第行分別加入一個測試用例你可以通過suiteaddTest(Test t)方法添加一個套件這樣運行這個套件就可以自動運行所有測試用例的測試方法了
  
  測試運行器
  
  JUnit提供了個標准的測試運行器運行這些測試用例或測試套件個測試運行器分別是
  
  ·junittextuiTestRunner文本測試運行器
  ·junitawtuiTestRunner使用AWT組件界面的測試運行器
  ·junitswinguiTestRunner使用Swing組件界面的測試運行器
  
  下面是基於AWT組件的測試運行器如下圖所示
  
  圖 錯誤!文檔中沒有指定樣式的文字AWT測試運行器
  
  ·Test class name指定測試用例類和測試套件類
  
  ·一個進度條表示運行測試的執行進度進度條下是正確錯誤失敗的測試統計數
  
  ·Error and Failures列出了測試錯誤和失敗的列表點選其中的一個選項時JUnit在窗口底部列出錯誤跟蹤跡
  
  提示
  
  JBuilder提供了方便的運行測試用例和測試套件類的方法你只須點擊鼠標右鍵就可直接調用了此外JBuilder提供了一個JBTestRunner測試運行器在功能和易用性上非JUnit提供的測試運行器所能媲美JBuilder支持JUnit所提供的兩個測試運行器junittextuiTestRunner和junitswinguiTestRunner
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28708.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.