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

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

Mock 方法是單元測試中常見的一種技術,它的主要作用是模擬一些在應用中不容易構造或者比較復雜的對象,從而把測試與測試邊界以外的對象隔離開。

編寫自定義的 Mock 對象需要額外的編碼工作,同時也可能引入錯誤。EasyMock 提供了根據指定接口動態構建 Mock 對象的方法,避免了手工編寫 Mock 對象。本文將向您展示如何使用 EasyMock 進行單元測試,并對 EasyMock 的原理進行分析。

1.Mock 對象與 EasyMock 簡介

單元測試與 Mock 方法

單元測試是對應用中的某一個模塊的功能進行驗證。在單元測試中,我們常遇到的問題是應用中其它的協同模塊尚未開發完成,或者被測試模塊需要和一些不容易構造、比較復雜的對象進行交互。另外,由于不能肯定其它模塊的正確性,我們也無法確定測試中發現的問題是由哪個模塊引起的。

Mock 對象能夠模擬其它協同模塊的行為,被測試模塊通過與 Mock 對象協作,可以獲得一個孤立的測試環境。此外,使用 Mock 對象還可以模擬在應用中不容易構造(如 HttpServletRequest 必須在 Servlet 容器中才能構造出來)和比較復雜的對象(如 JDBC 中的 ResultSet 對象),從而使測試順利進行。

EasyMock 簡介

手動的構造 Mock 對象會給開發人員帶來額外的編碼量,而且這些為創建 Mock 對象而編寫的代碼很有可能引入錯誤。目前,有許多開源項目對動態構建 Mock 對象提供了支持,這些項目能夠根據現有的接口或類動態生成,這樣不僅能避免額外的編碼工作,同時也降低了引入錯誤的可能。

EasyMock 是一套用于通過簡單的方法對于給定的接口生成 Mock 對象的類庫。它提供對接口的模擬,能夠通過錄制、回放、檢查三步來完成大體的測試過程,可以驗證方法的調用種類、次數、順序,可以令 Mock 對象返回指定的值或拋出指定異常。通過 EasyMock,我們可以方便的構造 Mock 對象從而使單元測試順利進行。

安裝 EasyMock

EasyMock 是采用 MIT license 的一個開源項目,您可以在 Sourceforge 上下載到相關的 zip 文件。目前您可以下載的 EasyMock 新版本是2.3,它需要運行在 Java 5.0 平臺上。如果您的應用運行在 Java 1.3 或 1.4 平臺上,您可以選擇 EasyMock1.2。在解壓縮 zip 包后,您可以找到 easymock.jar 這個文件。如果您使用 Eclipse 作為 IDE,把 easymock.jar 添加到項目的 Libraries 里可以使用了(如下圖所示)。此外,由于我們的測試用例運行在 JUnit 環境中,因此您還需要 JUnit.jar(版本3.8.1以上)。

圖1:Eclipse 項目中的 Libraries

2.使用 EasyMock 進行單元測試

通過 EasyMock,我們可以為指定的接口動態的創建 Mock 對象,并利用 Mock 對象來模擬協同模塊或是領域對象,從而使單元測試順利進行。這個過程大致可以劃分為以下幾個步驟:

    使用 EasyMock 生成 Mock 對象;
    設定 Mock 對象的預期行為和輸出;
    將 Mock 對象切換到 Replay 狀態;
    調用 Mock 對象方法進行單元測試;
    對 Mock 對象的行為進行驗證。

接下來,我們將對以上的幾個步驟逐一進行說明。除了以上的基本步驟外,EasyMock 還對特殊的 Mock 對象類型、特定的參數匹配方式等功能提供了支持,我們將在之后的章節中進行說明。

使用 EasyMock 生成 Mock 對象

根據指定的接口或類,EasyMock 能夠動態的創建 Mock 對象(EasyMock 默認只支持為接口生成 Mock 對象,如果需要為類生成 Mock 對象,在 EasyMock 的主頁上有擴展包可以實現此功能),我們以 ResultSet 接口為例說明EasyMock的功能。java.sql.ResultSet 是每一個 Java 開發人員都非常熟悉的接口:

清單1:ResultSet 接口

               
public interface java.sql.ResultSet {
......
public abstract java.lang.String getString(int arg0) throws java.sql.SQLException;
public abstract double getDouble(int arg0) throws java.sql.SQLException;
......
}


通常,構建一個真實的 RecordSet 對象需要經過一個復雜的過程:在開發過程中,開發人員通常會編寫一個 DBUtility 類來獲取數據庫連接 Connection,并利用 Connection 創建一個 Statement。執行一個 Statement 可以獲取到一個或多個 ResultSet 對象。這樣的構造過程復雜并且依賴于數據庫的正確運行。數據庫或是數據庫交互模塊出現問題,都會影響單元測試的結果。

我們可以使用 EasyMock 動態構建 ResultSet 接口的 Mock 對象來解決這個問題。一些簡單的測試用例只需要一個 Mock 對象,這時,我們可以用以下的方法來創建 Mock 對象:

ResultSet mockResultSet = createMock(ResultSet.class);


其中 createMock 是 org.easymock.EasyMock 類所提供的靜態方法,你可以通過 static import 將其引入(注:static import 是 java 5.0 所提供的新特性)。

上一頁12345下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 国产欧美日本亚洲精品一4区 | 香蕉视频好色先生 | 99re在线观看 | 一本大道高清香蕉中文大在线 | 在线观看午夜视频 | 天天射日日干 | 重口高h 全肉 文调教bl | 国产97在线观看 | 78m成年视频免费观看 | 午夜男人一级毛片免费 | 久草手机视频 | 色网址在线观看 | 动漫成年美女黄漫网站小视频 | a级午夜毛片免费一区二区 a级午夜理论免费毛片 | 久久精品国产99久久6动漫欧 | 国产成人免费福利网站 | 欧美成人免费全部观看在线看 | 国产一级毛片网站 | 日韩夜夜操| 不卡一区二区在线观看 | 欧美中文小说在线观看 | 一级毛片a女人刺激视频免费 | 最近的免费中文字幕视频 | 韩国2023理伦片免费观看 | 看黄免费在线 | 欧美性xxxx极品高清3d | k9女士 hd | 一级乱理中文字幕韩国 | 久久这里精品青草免费 | 波多野结衣中文一区二区免费 | 中文字幕日韩精品一区口 | 日韩一级特黄 | 中文三 级 黄 色 片 | 成人午夜视频免费观看 | 国产精品.com | 国产一区二区在线观看视频 | 欧美午夜在线 | 老湿福利影院 | 国产成人综合95精品视频免费 | 人人干干人人 | 免费精品一区二区三区在线观看 |