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

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

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

    BlogJava 聯系 聚合 管理  

    Blog Stats

    隨筆分類(196)

    隨筆檔案(209)

    文章檔案(4)

    相冊

    CRM&ERP

    Google

    SOA


    BlackStone SOA Group

    Driven By Test…

    程啟健(Kelvin)

    前兩天Eric說搞個讀書協會,那就讓我來寫第一篇吧。第一篇是關于Test-Driven Development的。

    TDD(Test-Driven Development)顧名思義就是測試驅動的開發。以測試驅動并不是代表以測試人員為中心進行開發,而是把要測試的內容作為軟件開發的目標來開發。測試的Case就是我們要達到的目標。其原則如下:

    • ?絕對沒有未進行過測試的代碼。
    • 沒有進行關聯測試的代碼不會進入產品中。
    • 你必須寫測試代碼先。
    • 測試決定了你要寫的代碼。

    TDD和Refactoring成為XP中最重要的實踐。兩者相輔相成,重構就是不改變程序內在功能的前提下更改代碼的結構。測試才能驗證你的重構沒有改變其功能。

    TDD的具體流程是怎樣的呢?為何測試可以在編碼先呢?

    以下是簡單的TDD的Sample(摘自TDD a practical guide by David Astels):

    本Sample假設你已了解JUnit等測試軟件。

    GOAL:做個電影的平均評分的函數。給個例子,假如觀眾甲給3分,觀眾乙給5分,平均分為4分。

    1.把目標做成測試用例。

    public void testRating() {

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    Make it Simple。就讓平均評分為4分先吧。

    2.但是總不能都是4分,而且評分的人可是觀眾阿。加個添加評分的函數。

    public void testRating() {

    starWars.addRating(3);

    starWars.addRating(5);

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    3.什么電影呢?是星球大戰!

    public void testRating() {

    Movie starWars = new Movie("Star Wars");

    starWars.addRating(3);

    starWars.addRating(5);

    assertEquals("Bad average rating.",4,starWars.getAverageRating());

    }

    4.編譯這些代碼的時候發現addRating(int)和getAverageRating()沒有定義。趕緊在Movie類中寫這些函數。

    public void addRating(int newRating) {

    }

    public int getAverageRating() {

    return 0;

    }

    測試失敗?Bad average rating. expected:<4> but was:<0>

    5.應該返回4而不是0!那就返回4吧。

    public int getAverageRating() {

    return 4;

    }

    重新編譯,綠條出現。Yeah。下面我們進入重構階段了。

    6.評分是由3分+5分的和后除以2才得的。直接返回4不符合要求阿。改。

    public int getAverageRating() {

    return (3 + 5) / 2;

    }

    7.編譯成功。又出綠條。但是算法上應該是總分除以個數才可以阿。繼續該吧。

    private int totalRating = 0;

    private int numberOfRatings = 0;

    public void addRating(int newRating) {

    totalRating += newRating;

    numberOfRatings++;

    }

    public int getAverageRating() {

    return totalRating / numberOfRatings;

    }

    8.編譯運行。綠色的.yeah.成功。寫多些用例測試下。大家來評評《哥斯拉》這部電影。

    public void testLotsOfRatings()

    {

    Moviegodzilla = new Movie("Godzilla");

    godzilla.addRating(1);

    godzilla.addRating(5);

    godzilla.addRating(1);

    godzilla.addRating(2);

    assertEquals("Bad average rating.",2,godzilla.getAverageRating());

    }

    TDD就是這樣一個編寫測試、編寫代碼、再測試、重構、再測試的過程。實現盡量少的功能,不斷地對代碼進行重構。利用TDD開發出來的代碼將會更干凈、更安全、更易于重構的。


    posted on 2006-06-28 15:09 BlackStone SOA 閱讀(259) 評論(0)  編輯  收藏 所屬分類: Book Club

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲一区二区无码偷拍| 久久久久亚洲av毛片大 | 亚洲欧洲美洲无码精品VA| 国产精品亚洲AV三区| 在线永久免费观看黄网站| 国产亚洲精品精品精品| 免费在线黄色网址| 91av免费在线视频| 国产亚洲精品xxx| 免费国产污网站在线观看15| 亚洲日本视频在线观看| 99久久免费精品国产72精品九九| 亚洲国产精品无码久久久| 野花高清在线观看免费3中文| 亚洲国产成人AV网站| 亚洲熟妇少妇任你躁在线观看无码| 一本久久A久久免费精品不卡| 亚洲国产无套无码av电影| 日韩免费人妻AV无码专区蜜桃| 亚洲精品在线免费观看视频| 成人免费一级毛片在线播放视频| 亚洲性无码AV中文字幕| 亚洲一区二区三区乱码A| 免费视频精品一区二区三区| 亚洲中文字幕久在线| 国产成人免费a在线视频色戒| 国产乱子伦精品免费视频| 337p日本欧洲亚洲大胆色噜噜| 成人免费a级毛片| a高清免费毛片久久| 久久亚洲精品无码aⅴ大香| 夫妻免费无码V看片| eeuss草民免费| 亚洲香蕉久久一区二区三区四区| 全黄性性激高免费视频| 在线看片免费人成视频福利| 在线亚洲午夜片AV大片| 亚洲成A人片在线观看中文| 18未年禁止免费观看| 日本特黄特色AAA大片免费| 亚洲精品美女久久久久|