亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-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
主站蜘蛛池模板: 91日韩欧美| 国产情侣啪啪 | 狠狠色噜噜狠狠狠狠97不卡 | 天天操天天弄 | 天天草综合网 | 91视频免费观看 | 成人免费无毒在线观看网站 | 夜夜弄| 美女视频网站黄 | 日本三级网络 | 免费在线资源 | 青草青青在线视频 | 国产新疆成人a一片在线观看 | 亚洲韩国欧美一区二区三区 | 成年网站在线在免费播放 | 成人在线小视频 | 国产精品久久久久一区二区 | 日韩欧美国产高清在线观看 | 天堂在线中文字幕 | 国产肥老妇视频∵ | 国产高清一区二区三区免费视频 | 日日做夜夜爽夜夜爽 | 天天射天天添 | 国产免费一级精品视频 | 国产成人黄色 | 男人下面桶女人视频免费 | 国产伦久视频免费观看 视频 | 亚洲精品色图 | m3u8久久国产精品影院 | 色网站免费视频 | 黄色视频毛片 | 韩国久播影院理论片不卡影院 | 免费的成人a视频在线观看 免费的a级毛片 | 国产成人乱码一区二区三区 | 亚洲第一伊人 | 成人在线播放视频 | 欧洲精品在线视频 | 男女羞羞免费视频 | 全部免费的毛片视频观看 | 国产亚洲欧美成人久久片 | 日韩精品欧美成人 |