亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
EasyMock使用方法與原理剖析
作者:網絡轉載 發布時間:[ 2013/2/21 13:32:40 ] 推薦標簽:

下面是示例代碼中的一個接口 SalesOrder,它的實現類 SalesOrderImpl 的主要功能是從數據庫中讀取一個 Sales Order 的 Region 和 Total Price,并根據讀取的數據計算該 Sales Order 的 Price Level(完整的實現代碼都可以在 src.zip 中找到):

清單2:SalesOrder 接口

               
public interface SalesOrder
{
  ……
  public void loadDataFromDB(ResultSet resultSet) throws SQLException; 
  public String getPriceLevel();
}


其實現類 SalesOrderImpl 中對 loadDataFromDB 的實現如下:

清單3:SalesOrderImpl 實現

               
public class SalesOrderImpl implements SalesOrder
{
  ......
  public void loadDataFromDB(ResultSet resultSet) throws SQLException
  {
    orderNumber = resultSet.getString(1);
    region = resultSet.getString(2);
    totalPrice = resultSet.getDouble(3);
  }
  ......
}


方法 loadDataFromDB 讀取了 ResultSet 對象包含的數據。當我們將之前定義的 Mock 對象調整為 Replay 狀態,并將該對象作為參數傳入,那么 Mock 對象的方法將會返回預先定義的預期返回值。完整的 TestCase 如下:

清單4:完整的TestCase

               
public class SalesOrderTestCase extends TestCase {
  public void testSalesOrder() {
    IMocksControl control = EasyMock.createControl();
    ......
    ResultSet mockResultSet = control.createMock(ResultSet.class);
    try {
      ......
      mockResultSet.next();
      expectLastCall().andReturn(true).times(3);
      expectLastCall().andReturn(false).times(1);
      mockResultSet.getString(1);
      expectLastCall().andReturn("DEMO_ORDER_001").times(1);
      expectLastCall().andReturn("DEMO_ORDER_002").times(1);
      expectLastCall().andReturn("DEMO_ORDER_003").times(1);
      mockResultSet.getString(2);
      expectLastCall().andReturn("Asia Pacific").times(1);
      expectLastCall().andReturn("Europe").times(1);
      expectLastCall().andReturn("America").times(1);
      mockResultSet.getDouble(3);
      expectLastCall().andReturn(350.0).times(1);
      expectLastCall().andReturn(1350.0).times(1);
      expectLastCall().andReturn(5350.0).times(1);
      control.replay();
      ......
      int i = 0;
      String[] priceLevels = { "Level_A", "Level_C", "Level_E" };
      while (mockResultSet.next()) {
        SalesOrder order = new SalesOrderImpl();
        order.loadDataFromDB(mockResultSet);
        assertEquals(order.getPriceLevel(), priceLevels[i]);
        i++;
      }
      control.verify();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


在這個示例中,我們首先創建了 ResultSet 的 Mock 對象 moResultSet,并記錄該 Mock 對象的預期行為。之后我們調用了 control.replay(),將 Mock 對象的狀態置為 Replay 狀態。 在實際的測試階段,Sales Order 對象的 loadDataFromDB 方法調用了 mockResultSet 對象的 getString 和 getDouble 方法讀取 mockResultSet 中的數據。Sales Order 對象根據讀取的數據計算出 Price Level,并和預期輸出進行比較。

對 Mock 對象的行為進行驗證

在利用 Mock 對象進行實際的測試過程之后,我們還有一件事情沒有做:對 Mock 對象的方法調用的次數進行驗證。

為了驗證指定的方法調用真的完成了,我們需要調用 verify 方法進行驗證。和 replay 方法類似,您需要根據 Mock 對象的生成方式來選用不同的驗證方式。如果 Mock 對象是由 org.easymock.EasyMock 類提供的 createMock 靜態方法生成的,那么我們同樣采用 EasyMock 類的靜態方法 verify 進行驗證:

verify(mockResultSet);


如果Mock對象是有 IMocksControl 接口所提供的 createMock 方法生成的,那么采用該接口提供的 verify 方法,例如第1節中的 IMocksControl 實例 control:

control.verify();


將對 control 實例所生成的 Mock 對象 mockConnection、mockStatement 和 mockResultSet 等進行驗證。如果將上例中 expectLastCall().andReturn(false).times(1) 的預期次數修改為2,在 Eclipse 中將可以看到:

圖3:Mock對象驗證失敗

Mock 對象的重用

為了避免生成過多的 Mock 對象,EasyMock 允許對原有 Mock 對象進行重用。要對 Mock 對象重新初始化,我們可以采用 reset 方法。和 replay 和 verify 方法類似,EasyMock 提供了兩種 reset 方式:(1)如果 Mock 對象是由 org.easymock.EasyMock 類中的靜態方法 createMock 生成的,那么該 Mock 對象的可以用 EasyMock 類的靜態方法 reset 重新初始化;(2)如果 Mock 方法是由 IMocksControl 實例的 createMock 方法生成的,那么該 IMocksControl 實例方法 reset 的調用將會把所有該實例創建的 Mock 對象重新初始化。

上一頁12345下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲噜噜噜噜噜影院在线播放 | 最新男同志freevideos | 色噜噜狠狠狠狠色综合久不 | 国产高清在线丝袜精品一区 | 成年人在线视频免费观看 | 成人影院vs一区二区 | 亚洲一区日韩二区欧美三区 | a级毛片免费观看在线播放 a级毛片免费完整视频 | 热久久伊人 | 欧美日韩在线吹潮视频 | 天天爽天天碰狠狠添 | 免费又黄又硬又大爽日本 | 欧美精品一线二线大片 | 性高跟鞋xxxxhd | 特黄aaaaaaaaa及毛片 | 在线 | 一区二区三区四区 | 狠狠综合久久综合88亚洲日本 | www在线视频 | 一个人看的www免费观看 | 久久综合精品不卡一区二区 | 亚洲va欧美va国产综合久久 | 一本大道在线观看 | 五月激情婷婷网 | 九月色婷婷| 在线视频观看一区 | 成人开心网| 亚洲精品tv久久久久久久久 | 日韩视频第1页 | 人人做人人澡人人人爽 | 一级有奶水毛片免费看 | 亚洲一页 | 免费a级毛片在线播放 | 亚洲小说综合 | 色综合网址 | 国产亚洲精品看片在线观看 | 中文日韩亚洲欧美制服 | 黄色大片免费观看 | 欧美性导航 | 国产欧美日韩不卡一区二区三区 | 欧美爽爽爽爽爽爽视频 | 亚洲综合精品一区二区三区中文 |