aldream

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            1 Posts :: 10 Stories :: 1 Comments :: 0 Trackbacks
          使用JUnit時,您主要都是透過繼承TestCase類別來撰寫測試案例,預設上您可以使用testXXX() 名稱來撰寫單元測試。

          在測試一個單元方法時,有時您會需要給它一些物件作為運行時的資料,例如您撰寫下面這個測試案例:

          MaxMinTest.java
           1 package onlyfun.caterpillar.test;
           2 
           3 import onlyfun.caterpillar.MaxMinTool;
           4 import junit.framework.TestCase;
           5  
           6 public class MaxMinTest extends TestCase {
           7     public void testMax() {
           8         int[] arr = {-5-4-3-2-1012345};
           9         assertEquals(5, MaxMinTool.getMax(arr));
          10     }
          11 
          12     public void testMin() {
          13         int[] arr = {-5-4-3-2-1012345};
          14         assertEquals(-5, MaxMinTool.getMin(arr));
          15     }
          16     
          17     public static void main(String[] args) {
          18         junit.swingui.TestRunner.run(MaxMinTest.class);
          19     }
          20 }

          您將設計的MaxMinTool包括靜態方法getMax()與getMin(),當您給它一個整數陣列,它們將個別傳回陣列中的最大值與最小值,顯然 的,您所準備的陣列重複出現在兩個單元測試之中,重複的程式碼在設計中可以減少就儘量減少,在這兩個單元測試中,整數陣列的準備是單元方法所需要的資源, 我們稱之為fixture,也就是一個測試時所需要的資源集合。

          fixture必須與上下文(Context)無關,也就是與程式執行前後無關,這樣才符合單元測試的意涵,為此,通常將所需的fixture撰寫在單元方法之中,如此在單元測試開始時創建fixture,並於結束後銷毀fixture。

          然而對於重複出現在各個單元測試中的fixture,您可以集中加以管理,您可以在繼承TestCase之後,重新定義setUp()tearDown()方法,將數個單元測試所需要的fixture在setUp()中創建,並在tearDown()中銷毀,例如:

          MaxMinTest.java
           1 package onlyfun.caterpillar.test;
           2 
           3 import onlyfun.caterpillar.MaxMinTool;
           4 import junit.framework.TestCase;
           5 
           6 public class MaxMinTest extends TestCase {
           7     private int[] arr;
           8 
           9     protected void setUp() throws Exception {
          10         super.setUp();
          11         arr = new int[]{-5-4-3-2-1012345};
          12     }
          13 
          14     protected void tearDown() throws Exception {
          15         super.tearDown();
          16         arr = null;
          17     }
          18     
          19     public void testMax() {
          20         assertEquals(5, MaxMinTool.getMax(arr));
          21     }
          22 
          23     public void testMin() {
          24         assertEquals(-5, MaxMinTool.getMin(arr));
          25     }
          26     
          27     public static void main(String[] args) {
          28         junit.swingui.TestRunner.run(MaxMinTest.class);
          29     }
          30 }

          setUp()方法會在每一個單元測試testXXX()方法開始前被呼叫,因而整數陣列會被建立,而tearDown()會在每一個單元測試 testXXX()方法結束後被呼叫,因而整數陣列參考名稱將會參考至null,如此一來,您可以將fixture的管理集中在 setUp()與tearDown()方法之後。

          最後按照測試案例的內容,您完成MaxMinTool類別:

          MaxMinTool.java
           1 package onlyfun.caterpillar;
           2 
           3 public class MaxMinTool {
           4     public static int getMax(int[] arr) {
           5         int max = Integer.MIN_VALUE;
           6         
           7         for(int i = 0; i < arr.length; i++) {
           8             if(arr[i] > max)
           9                 max = arr[i];
          10         }
          11         
          12         return max;
          13     }
          14     
          15     public static int getMin(int[] arr) {
          16         int min = Integer.MAX_VALUE;
          17         
          18         for(int i = 0; i < arr.length; i++) {
          19             if(arr[i] < min)
          20                 min = arr[i];
          21         }
          22         
          23         return min;
          24     }
          25 }

          Swing介面的TestRunner在測試失敗時會顯示紅色的棒子,而在測試成功後會顯示綠色的棒子,而 "Keep the bar green to keep the code clean." 正是JUnit的名言,也是測試的最終目的。
          posted on 2007-11-11 00:55 aldream 閱讀(597) 評論(0)  編輯  收藏 所屬分類: javaJUnit測試
          主站蜘蛛池模板: 什邡市| 淅川县| 武安市| 余江县| 盖州市| 蒙城县| 张家港市| 曲靖市| 大同市| 漳浦县| 湘潭市| 兴宁市| 贵定县| 麻江县| 康保县| 清徐县| 台安县| 河北省| 台湾省| 天镇县| 定西市| 同心县| 澄城县| 两当县| 固镇县| 武义县| 同仁县| 南丹县| 石台县| 柳州市| 饶阳县| 东兴市| 乳源| 荆州市| 苗栗市| 铁岭县| 江陵县| 百色市| 惠东县| 阳春市| 中山市|