JUnit入門

azz發表於2007-08-23
JUnit入門[@more@]  一、簡介

  JUnit是一個開源的java單元測試框架。在1997年,由 Erich Gamma 和 Kent Beck 開發完成。這兩個牛人中 Erich Gamma 是 GOF 之一;Kent Beck 則在 XP 中有重要的貢獻(你覺得眼熟一點都不奇怪)。
  正如常言道:“麻雀雖小,五臟俱全。” JUnit設計的非常小巧,但是功能卻非常強大。
  下面是JUnit一些特性的總結:
  1) 提供的API可以讓你寫出測試結果明確的可重用單元測試用例
  2) 提供了三種方式來顯示你的測試結果,而且還可以擴充套件
  3) 提供了單元測試用例成批執行的功能
  4) 超輕量級而且使用簡單,沒有商業性的欺騙和無用的嚮導
  5) 整個框架設計良好,易擴充套件
  對不同性質的被測物件,如Class,Jsp,Servlet,Ejb等,Junit有不同的使用技巧。由於本文的性質,以下僅以Class測試為例。

  二、

  點選可以下載到最新版本的JUnit,本文使用的為3.8.1版。至於安裝或者配置之類,你只需要輕鬆的將下載下來的壓縮包中的jar檔案,放到你工程的classpath中就可以了。
  這樣,你的系統中就可以使用JUnit編寫單元測試程式碼了(是不是很簡單)!

  三、HelloWorld

  記得在幾乎每本語言教學書上都能找到HelloWorld這個入門程式碼。今天在這裡,我們也從一個簡單到根本不用單元測試的例子入手。這是一個只會做兩數加減的超級簡單的計算器(小學一年級必備極品)。程式碼如下:

  public class SampleCalculator
  {
   public int add(int augend , int addend)
   {
   return augend + addend ;
   }

   public int subtration(int minuend , int subtrahend)

   {

   return minuend - subtrahend ;

   }

  }

  將上面的程式碼編譯透過。下面就是我為上面程式寫的一個單元測試用例:

  //請注意這個程式裡面類名和方法名的特徵
  import junit.framework.TestCase;
  public class TestSample extends TestCase

  {

   public void testAdd()

   {

  SampleCalculator calculator = new SampleCalculator();

   int result = calculator.add(50 , 20);

   assertEquals(70 , result);

   }

   public void testSubtration()

   {

   SampleCalculator calculator = new SampleCalculator();

   int result = calculator.subtration(50 , 20);

   assertEquals(30 , result);

   }

  }

  好了,在DOS命令列裡面輸入javac TestSample.java 將測試類編譯透過。然後再輸入 java junit.swingui.TestRunner TestSample 執行測試類,你會看到如下的視窗。

  綠色說明單元測試透過,沒有錯誤產生;如果是紅色的,則就是說測試失敗了。這樣一個簡單的單元測試就完成了.

  按照框架規定:編寫的所有測試類,必須繼承自junit.framework.TestCase類;裡面的測試方法,命名應該以Test開頭,必須是public void 而且不能有引數;而且為了測試查錯方便,儘量一個TestXXX方法對一個功能單一的方法進行測試;使用assertEquals等junit.framework.TestCase中的斷言方法來判斷測試結果正確與否。

  你可以對比著上面測試類中的實現來體會下規定——很簡單!而且你在這個測試類中有加入多少個測試方法,就會執行多少個測試方法。

  四、向前一步

  學完了HelloWorld,你已經可以編寫標準的單元測試用例了。但是還有一些細節,這裡還要說明一下。不要急,很快的!
  另外你是否注意到,上面彈出視窗的一個細節,在綠條下面有Errors、Failures統計。這兩者有何區別呢?
  Failures作為單元測試所期望發生的錯誤,它預示你的程式碼有bug,不過也可能是你的單元測試程式碼有邏輯錯誤(注意是邏輯錯誤)。Errors不是你所期待的,發生了Error你可以按照下面的順序來檢查:

  檢查測試所需的環境,如:資料庫連線

  檢查單元測試程式碼

  檢查你的系統程式碼

  五、成批執行test case

  這是前面提到的JUnit特性之一。它方便於系統單元測試的成批執行。使用起來也是非常簡單,先看下使用程式碼:

  import junit.framework.Test;

  import junit.framework.TestSuite;

  public class TestAll{

   public static Test suite(){

   TestSuite suite = new TestSuite("TestSuite Test");

   suite.addTestSuite( TestSample.class);

   return suite;

   }

  }

  這個測試程式的編譯、執行,和上面TestSample的方式是一樣的。

  javac TestAll.java

  java junit.swingui.TestRunner TestAll

  怎麼樣?這樣你在suite方法裡面新增幾個TestCase就會執行幾個,而且它也可以新增TestSuite來將小一點的集合加入大的集合中來,方便了對於不斷增加的TestCase的管理和維護。

  你覺得suite方法的作用是不是於java應用程式的main很類似?並且這裡的suite必須嚴格遵守上面的寫法!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965467/,如需轉載,請註明出處,否則將追究法律責任。

相關文章