利用Ruby簡化你的Java測試

來源:互聯網
上載者:User

Martin Fowler:當然(願意花掉一半的時間來寫單元測試)!因為單元測試能夠使你更快地完成工作。無數次的實踐已經證明這一點。你的時間越是緊張,就越是要寫單元測試,它看上去慢,但實際上能夠協助你更快、更舒服地達到目標。

單元測試很重要,但是……

單元測試的重要性,我想再多做一些強調也不為過。但實際情況是我經常聽到Java開發人員抱怨單元測試繁瑣、難寫。雖然勉強為之,卻疲於奔命,並沒有體會到它的好處!最終造成的結果是出現了大量只能運行一次的單元測試。是將責任簡單歸結於開發人員?還是開發流程或制度的不完善?

平心而論,我自己在做TDD或單元測試的時候,有很多時候也確實覺得無趣,尤其是在一些準備測試資料或測試環境的工作上,例如我們經常需要隨機產生特定長度的字串用於測試,需要如下代碼:

public String getRandomAlphabetic(int count) {
       count = count <= 0 ? 5 : count; //預設為5
       //構建一個包含所有英文字母的字串
       String alphabet="abcdefghijklmnopqistuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
       StringBuffer sb = new StringBuffer(count);
       for (int i = 0; i < count; i++) {
         int character=(int)(Math.random()*26);
         sb.append(alphabet.substring(character, character+1));
       }
       return sb.toString();
   }

如果用Ruby的話

def random_alphabetic(size=5)
       chars = ('a'..'z').to_a + ('A'..'Z').to_a # 構建一個從a到Z的一個字母表數組
      (0...size).collect { chars[rand(chars.length)] }.join # 從chars數組中返回指定長度的隨機字元數組(預設5個),調用join方法,將這個數組中的所有元素串連成一個字串
   end

對比後大家感覺如何?有經驗的開發人員馬上會挑戰說,我們有現成的commons-lang庫,簡單調用RandomStringUtils.randomAlphabetic(5)就可以完成任務,可我想問的是,如果沒有第三方庫的支援,你更願意用哪種方式?還可以想象構建一個樹狀結構的資料,Ruby的方式

data =<<-EOF
   {
   "order_id": "xxx-xxxxx-xxx",
   "books": [
     {"ISBN": "2323-2323", "number": 2, "price": 20.00},
     {"ISBN": "2323-2324", "number": 3, "price": 30.00},
     {"ISBN": "2323-2325", "number": 2, "price": 20.00},
     {"ISBN": "2323-2326", "number": 3, "price": 30.00},
     {"ISBN": "2323-2327", "number": 2, "price": 20.00}
    ]
   }
   EOF     # 該資料為json格式的一段字串
   order = JSON.parse(data)
   p order['books'][0]['ISBN'] #=> 2323-2323

用Java該怎樣完成,很多人會祭出Java世界中最被濫用的七種武器之首“xml”,即便如此能完成的如此優雅嗎?如果不是簡單的“語言宗教崇拜”,至少我會毫不猶豫的選擇用Ruby的方式完成任務。省點時間,早點下班陪陪老婆也好啊!:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.