• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試之EasyMock 使用方法與原理剖析

    發布: 2009-4-08 09:41 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 264次 | 進入軟件測試論壇討論

    領測軟件測試網

    我們仍然用ResultSet接口的 Mock 對象為例,如果希望方法mockResult.getString(1)的返回值為 "My return value",那么你可以使用以下的語句: mockResultSet.getString(1); expectLastCall().andReturn("My return value");

      以上的語句表示mockResultSet的getString方法被調用一次,這次調用的返回值是 "My return value"。有時,我們希望某個方法的調用總是返回一個相同的值,為了避免每次調用都為 Mock 對象的行為進行一次設定,我們可以用設置默認返回值的方法: void andStubReturn(Object value);

      假設我們創建了Statement和ResultSet接口的 Mock 對象 mockStatement 和 mockResultSet,在測試過程中,我們希望 mockStatement 對象的executeQuery方法總是返回 mockResultSet,我們可以使用如下的語句 mockStatement.executeQuery("SELECT * FROM sales_order_table"); expectLastCall().andStubReturn(mockResultSet);

      EasyMock 在對參數值進行匹配時,默認采用Object.equals()方法。因此,如果我們以"select * from sales_order_table"作為參數,預期方法將不會被調用。如果您希望上例中的 SQL 語句能不區分大小寫,可以用特殊的參數匹配器來解決這個問題,我們將在 "在 EasyMock 中使用參數匹配器" 一章對此進行說明。

    設定預期異常拋出

      對象行為的預期輸出除了可能是返回值外,還有可能是拋出異常。IExpectationSetters提供了設定預期拋出異常的方法: IExpectationSetters<T> andThrow(Throwable throwable);

      和設定默認返回值類似,IExpectationSetters接口也提供了設定拋出默認異常的函數: void andStubThrow(Throwable throwable);

    設定預期方法調用次數

      通過以上的函數,您可以對 Mock 對象特定行為的預期輸出進行設定。除了對預期輸出進行設定,IExpectationSetters接口還允許用戶對方法的調用次數作出限制。在IExpectationSetters所提供的這一類方法中,常用的一種是times方法: IExpectationSetters<T>times(int count);

      該方法可以 Mock 對象方法的調用次數進行確切的設定。假設我們希望 mockResultSet 的getString方法在測試過程中被調用3次,期間的返回值都是 "My return value",我們可以用如下語句: mockResultSet.getString(1); expectLastCall().andReturn("My return value").times(3);

      注意到andReturn和andThrow方法的返回值依然是一個IExpectationSetters實例,因此我們可以在此基礎上繼續調用times方法。

      除了設定確定的調用次數,IExpectationSetters還提供了另外幾種設定非準確調用次數的方法:
    times(int minTimes, int maxTimes):該方法最少被調用 minTimes 次,最多被調用 maxTimes 次。
    atLeastOnce():該方法至少被調用一次。
    anyTimes():該方法可以被調用任意次。

      某些方法的返回值類型是 void,對于這一類方法,我們無需設定返回值,只要設置調用次數就可以了。以ResultSet接口的close方法為例,假設在測試過程中,該方法被調用3至5次: mockResultSet.close(); expectLastCall().times(3, 5);

      為了簡化書寫,EasyMock 還提供了另一種設定 Mock 對象行為的語句模式。對于上例,您還可以將它寫成: expect(mockResult.close()).times(3, 5);

      這個語句和上例中的語句功能是完全相同的。

    將 Mock 對象切換到 Replay 狀態

      在生成 Mock 對象和設定 Mock 對象行為兩個階段,Mock 對象的狀態都是 Record 。在這個階段,Mock 對象會記錄用戶對預期行為和輸出的設定。

      在使用 Mock 對象進行實際的測試前,我們需要將 Mock 對象的狀態切換為 Replay。在 Replay 狀態,Mock 對象能夠根據設定對特定的方法調用作出預期的響應。將 Mock 對象切換成 Replay 狀態有兩種方式,您需要根據 Mock 對象的生成方式進行選擇。如果 Mock 對象是通過org.easymock.EasyMock類提供的靜態方法 createMock 生成的(第1節中介紹的第一種 Mock 對象生成方法),那么EasyMock類提供了相應的 replay 方法用于將 Mock 對象切換為 Replay 狀態: replay(mockResultSet);

      如果 Mock 對象是通過IMocksControl接口提供的createMock方法生成的(第1節中介紹的第二種Mock對象生成方法),那么您依舊可以通過IMocksControl接口對它所創建的所有 Mock 對象進行切換: control.replay();

      以上的語句能將在第1節中生成的 mockConnection、mockStatement 和 mockResultSet 等3個 Mock 對象都切換成 Replay 狀態。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    33/3<123

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>