使用EasyMock做單元測試

發表于:2007-05-25來源:作者:點擊數: 標簽:測試單元ZDNet本文EasyMock
本文是為 ZDNet 翻譯的系列文章之一,原文已經發表在ZDNet網站 單元測試的普及已經增長,部分原因是 極限編程 (eXtremeProgramming)的增長,然而編寫強大的單元測試是令人厭煩的事情。對象仿制通過偽造需要測試的目標的周圍的對象來幫助減少你的工作,然后
本文是為ZDNet翻譯的系列文章之一,原文已經發表在ZDNet網站

單元測試的普及已經增長,部分原因是極限編程(eXtreme Programming)的增長,然而編寫強大的單元測試是令人厭煩的事情。對象仿制通過偽造需要測試的目標的周圍的對象來幫助減少你的工作,然后使用它檢查和需要測試的目標相關的調用。 
EasyMock是 創建那些偽造對象的快速的方法,同時它會保持單元測試的能力。EasyMock 的通常用法是: 
1.    為一個接口創建一個偽造對象 
2.    訓練那個接口告訴它期望的調用以及需要得到的反應 
3.    測試目標并驗證偽造的對象 
這里有測試一個方法的范例,Mapper.map(Processor, Integer[]),map方法對數組中的每個整數調用Processor.process 方法:
  1. public void testArrayProcessing() throws java/lang/Exception.java.html" target="_blank">Exception {
  2.     Integer[] numbers = new Integer[2] {
  3.         new Integer(6),
  4.         new Integer(7)
  5.     };
  6.     // 創建偽造對象
  7.     MockControl control = EasyMock.controlFor (Processor.class);
  8.     Processor mockProcessor = (Processor)control.getMock();
  9.     // 訓練對象
  10.     mockProcessor.process (numbers[0]);
  11.     control.setReturnValue (new Integer(1));
  12.     mockProcessor.process (numbers[1]);
  13.     control.setReturnValue (new Integer(1));
  14.     // 開始
  15.     control.activate ();
  16.     // 運行測試
  17.     Mapper.map(mockProcess, numbers);
  18.     // 驗證測試
  19.     control.verify();

調用control 的verify 方法很重要,否則訓練的一半就不能被測試。例如如果我們已經指定那個方法必須返回整數’1’,那么調用verify方法確保返回的確實是那個值。 
訓練過程中的方法調用的順序沒有影響,但是我們可以指定一個方法只能被調用指定的次數: 
//假設Processor接口有一個setName方法,并且
// 我們的類 Mapper,對每個項目都調用那個方法一次
mockProcessor.setName("Test");
control.setVoidCallable(3); 
當我們調用verify方法,它會檢查setName 被調用了多少次,如果那個方法被調用得太頻繁就會報告一個錯誤。 
EasyMock的主要局限性是只能工作于接口上,但是使用接口是一個好的設計習慣,這沒有什么可抱怨的。 
EasyMock可以節省很多費力的工作并使得可以更快的編寫單元測試??梢詮?a target='_blank' class='l2'>網上下載EasyMock,還有一個關于對象仿制的論文和其他的對象仿制API的鏈接。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97