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

在 Eclipse 中使用 JUnit 啟蒙引導

2013-11-23 20:38:19  來源: Java開源技術 

  許多書上都討論了自動測試但是只有很少的著作注意到這麼一個問題那就是怎樣把這些測試組織起來隨著測試的增加放置和調用這些測試卻變得更加麻煩這將成為一個重要問題以至於出現了TDD極限編程(XP)使TDD得以普及另外你可以這樣理解TDD通過測試來開發
  
  TDD的主要規范
  在編寫程序代碼之前與之對應的自動測試必須被寫好甚至程序代碼並不存在那也要看見一個失敗的測試結果
  
  在測試通過後副本代碼必須被丟棄
  
  有一個具體步驟(可能指的是《Extreme Programming》)可以被任何一個程序員來參考而不需要特殊的其他方法在我們開始寫測試之前這些步驟(章節)應該被首先閱讀——怎樣組織自動測試
  
  講解一下不同種類的測試
  單元測試檢測模塊(也就是類)的正確性如果對象需要訪問外部的數據資源例如數據庫就需要模擬一個mock objects但在實際中真實數據與測試環境是不同的
  
  客戶測試這是功能性系統和驗收測試用來測試整體的系統特性在XP中這些測試由用戶編寫
  
  綜合測試介於用戶測試和單元測試之間的橋梁綜合測試幫助測試應用程序的交互性一般情況下mock objects不被用於綜合測試它會增加測試時間同樣綜合測試經常依賴特殊的測試環境例如數據庫送來的測試數據綜合測試也需要用到外部類庫例如為JEE應用程序進行綜合測試的類庫Cactus解釋這些測試超出了本文的范圍需要更加詳細的信息請參考
  
  開發人員測試這是用來讓開發人員檢驗自己代碼或新函數的對於每一個開發人員只要有可能就需要有更多的測試來檢驗代碼組織這些測試和組織程序代碼一樣重要
  
  在以下章節只要提到測試那就指的是開發人員測試
  
  我們幾乎准備好開始建立測試了先應該為我們的測試選擇名字你也許會說這不是問題Test這個字放在類名前面就好了!不會這麼快!讓我來說一下這個步驟存在的問題
  
  在TDD中被測試的類或者方法還不存在
  
  一個測試能夠覆蓋多個方法甚至多個類這是可能的
  
  以上只是一些普遍問題還存在更多的問題
  
  讓我來提一個建議在測試命名時測試類的名字應該讓人一眼就知道這是一個測試類且能說明它要測試什麼注意是否和其他類重名按照以上建議做就很簡單了也不用擔心名字太長或難聽
  
  即將在Eclipse中用JUnit工具創建我們第一個測試了假設你已經下載了一個最新的Eclipse版本如果還沒有你應該去官方站點下載還需要JUnit也可以從下載
  
  運行Eclipse新建一個workplace項目點擊文件>新建>項目選擇Java項目點擊下一步起一個項目名稱例如ProjectWithJUnit點擊完成這樣就完成新項目的建立了再來配置一下Eclipse在構建路徑中添加JUnit類庫在工具條上點擊項目>屬性選擇Java構建路徑選擇添加外部JAR浏覽Junit被存儲的目錄選擇junitjar點擊打開你將會看見JUnit出現在庫的列表中點擊確定讓Eclipse重建路徑
  
  現在開發我們的Hello World例子按照TDD的規則應該在代碼建立以前先把測試寫好為了能夠在某出開始我們假設未來的類名是HelloWorld並且有一個方法Say()這個方法返回String的值(例如Hello World!
  
  建立測試在ProjectWithJUnit的標題上面點擊右鍵選擇新建>其他展開Java選項選擇JUnit在右邊的欄目對話框中選擇測試案例然後下一步
  
  在測試類這一欄中寫上將要被測試的類名HelloWorld選擇一個測試案例的名字例如TestThatWeGetHelloWorldPrompt(是的看上去很長但是很清楚它的行為)點擊完成
  
  TestThatWeGetHelloWorldPrompt的代碼如下
  
  import junitframeworkTestCase;
  
  public class TestThatWeGetHelloWorldPrompt
  
  extends TestCase {
  
    public TestThatWeGetHelloWorldPrompt(
  
      String name) {
  
      super(name);
  
    }
  
    public void testSay() {
  
      HelloWorld hi = new HelloWorld();
  
      assertEquals(Hello World! hisay());
  
    }
  
    public static void main(String[] args) {
  
      junittextuiTestRunnerrun(
  
        TestThatWeGetHelloWorldPromptclass);
  
    }
  
  }
  代碼並不復雜只是有點與眾不同然而讓我們考察一下細節我們繼承了JUnit的TestCase類它在JUnit的javadocs定義為運行眾多測試的夾具JUnit也有TestSuite類它是一組測試案例的集合但在本文中不做討論
  
  建立測試案例的步驟如下
  建立一個junitframeworkTestCase的實例
  
  定義一些以test開頭的無返回方法(例如testWasTransactionSuccessful()testShow()等等)
  
  TestThatWeGetHelloWorldPromptjava包含這些TestCase的子類和一個叫做testSay()的方法這個方法調用了assertEquals()函數它用來比較我們預期的值和由say()返回的值
  
  main()方法用來運行測試和顯示輸出的JUnit的TestRunner處理測試提供基於圖像和文本的輸出表現形式我們使用基於文本的版本因為Eclipse支持它且也適合我們當開始運行後基於文本的版本測試會以文本形式輸出Eclipse會把這些輸出自動變成圖像界面的輸出
  
  按照TDD規范首次運行測試應該故意讓它失敗點擊運行>運行為>Junit測試(記住TestThatWeGetHelloWorldPromptjava應該被突出的顯示在包資源管理器中)在左邊窗口應該看見JUnit窗口而不是包資源管理器它顯示一個紅條一次失敗的測試具體的失敗原因參看圖如果沒有自動顯示這些內容點擊JUnit標簽(在底部的左邊)
  
 educitycn/img_///gif>

  
JUnit中失敗的測試

  現在我們來建立被測試代碼在包資源管理器窗口的ProjectWithJUnit標題上右擊選擇新建>類選擇類名我們已經假設了它叫HelloWorld然後直接點擊完成為HelloWorldjava填入下列代碼
  
    public class HelloWorld {
  
      public String say() {
  
        return(Hello World!);
  
      }
  
    }
  這段代碼很簡單甚至不需要注解我們再來看看結果按照上面描述過的方式在JUnit的窗口中顯示了一個綠條參看圖綠條證明測試成功
  
 educitycn/img_///gif >

  
JUnit中成功的測試

  現在我們想再讓測試失敗一次但原因不同這有助於展示JUnit測試中不同的報錯信息修改assertEquals()代碼Hello World!變成Hello Me!當再次運行JUnit時結果變成了紅條在JUnit窗口的底部輸出了失敗原因參看圖
  
educitycn/img_///gif>

  
JUnit中的ComparisonError

  最後想說一下關於測試是開發過程中的必要部分的話題測試代碼一直是開發中的重要部分經過近幾年的發展已得到了很大的提高這要歸功於強大的理論研究(比如expectationsbased development等等)和快速發展的測試工具包還有測試過程的改進如果你對這篇文章感興趣那請你花一些時間來正式的學習一下測試理論吧這對你的工作很有用
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28801.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.