<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    離弦之Ray

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

    ???? 閑逛東大浦口圖書館,看到《單元測試之道——java版》,早已聞此書之大名,借來一閱。

    ??????JUnit有多重要等等就不多說了,如果你想接觸它,Come on,書上有個簡單的例子。下面是一個被測試的例子:

    public class Largest {
    ???? public static int largest(int[] list)
    ??? {
    ????????? int index, max = Integer.MAX_VALUE;
    ??????????for(index=0;index<list.length-1;index++){
    ????????? if(list[index]>max)max=list[index];
    ????????? }
    ???????? return max;
    ??????? ?}
    }
    這是一段有錯誤的程序,明眼人應該能看出來,以它來說明JUnit的用法。
    我使用的Eclipse 3.1 ,JDK是1.4.2版本的。

    在此工程里新建一個JUnit Test Case(JUnit在整個工程中所占的位置在后面有說暫時就隨意了,可以放在被測程序同一個package內,也可以重新新建一個package)

    剛生成的Test Case是如下這樣的
    package com.test.ray;

    import junit.framework.TestCase;

    public class TestLargest extends TestCase {
    }
    標記紅色是因為這是一個test case 一定要繼承的,而上面引用進來的junit.framework.TestCase包含了一個TestCase的具體框架。

    跟普通的類一樣,它需要一個構造函數。
    public TestLargest(String name)
    ?{
    ??super(name);
    ?}
    其中的name到底是什么,下一篇再講。
    接下來就可以寫測試函數了,如果你想讓自己寫的測試函數自動被編譯器運行的話,請務必以test作為方法名的開頭。
    public void testSimple()
    ?{
    ??assertEquals(9,Largest.largest(new int[]{7,8,9}));
    ??assertEquals(-7,Largest.largest(new int[]{-8,-7,-9}));
    ?}

    測試方法體一般是有斷言組成的(關于斷言的內容,以后再講),第一個斷言主要是測試邊界的,可以看到9位于數組的最后,運行后可以在Eclipse里面看到一個紅條,會有相關的錯誤信息。
    junit.framework.AssertionFailedError: expected:<9> but was:<2147483647>
    ?從此你可以分析到,程序中循環語句判斷條件應該是index<list.length,哈哈,一個錯誤找到了。

    可是改過之后還是有錯
    仔細看看……
    God,max的初始化!!!
    可能很多人會想當然地把它改成max=0;
    讓我們看看接下來會發生什么。
    junit.framework.AssertionFailedError: expected:<-7> but was:<0>
    知道為什么了嗎?如果數組里面有負數,得到的結果當然是0了。
    應該是這樣max=Integer.MIN_VALUE;
    測試順利通過!

    其實這個程序還是有漏洞的,就是如果傳入的數組是一個空數組的情況,可以這樣改寫
    public class Largest {
    ?public static int largest(int[] list)
    ?{
    ??int index, max = Integer.MIN_VALUE;
    ??if(list.length==0){throw new RuntimeException("Empty list");}
    ??for(index=0;index<list.length;index++)
    ??{
    ???if(list[index]>max)max=list[index];
    ??}
    ??return max;
    ?}
    }

    對應的Test Case也改變一下
    public class TestLargest extends TestCase {
    ?public TestLargest(String name)
    ?{
    ??super(name);
    ?}
    ?public void testSimple()
    ?{
    ??assertEquals(9,Largest.largest(new int[]{7,8,9}));
    ??assertEquals(-7,Largest.largest(new int[]{-8,-7,-9}));
    ?}
    ?public void testEmpty()
    ?{
    ??try{
    ???Largest.largest(new int[]{});
    ???fail("lallal");
    ???}catch(RuntimeException e){System.out.println("cuo la!");}
    ?}
    }
    增加了一個測試數組為空的測試方法,從Test Case下面的Console中可以知道Test Case 已經捕獲了這個異常。

    好了,今天就寫到這里,下次有更精彩的內容哦。

    ?

    posted on 2006-06-11 00:26 離弦之ray的技術天空 閱讀(368) 評論(0)  編輯  收藏 所屬分類: JUnit

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 有码人妻在线免费看片| 亚洲综合激情五月色一区| 一级女性全黄生活片免费看| 免费无码又爽又高潮视频| 亚洲人成网站免费播放| 成年女人免费视频播放体验区| 久久精品国产亚洲av麻豆蜜芽 | 亚洲一区中文字幕在线观看| 污污免费在线观看| 国产成人免费高清在线观看| 老司机精品视频免费| 亚洲国产精品国产自在在线 | 伊人久久免费视频| 精品日韩亚洲AV无码| 18pao国产成视频永久免费| 亚洲电影唐人社一区二区| 亚洲国产精品免费在线观看| 亚洲午夜一区二区电影院| 特级淫片国产免费高清视频| 国产亚洲精品欧洲在线观看| 久久国产成人亚洲精品影院 | 亚洲高清国产拍精品26U| 国产精品99精品久久免费| 久久亚洲日韩看片无码| 午夜宅男在线永久免费观看网| 亚洲色大18成人网站WWW在线播放| 国产男女猛烈无遮档免费视频网站| 精品国产亚洲一区二区三区在线观看| 日韩亚洲国产高清免费视频| 亚洲中文字幕无码一去台湾| 国产一级特黄高清免费大片| 成人免费ā片在线观看| 亚洲综合视频在线| 超pen个人视频国产免费观看| 一区二区三区免费高清视频| 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲色精品三区二区一区| 亚洲中文字幕伊人久久无码| 6080午夜一级毛片免费看| 日韩亚洲综合精品国产| 亚洲五月激情综合图片区|