天天看點

接口測試從零開始系列_mock技術使用

1、什麼情況下會使用mock技術

  (1)需要将目前被測單元和其依賴子產品獨立開來,構造一個獨立的測試環境,不關注被測單元的依賴對象,隻關注被測單元的功能邏輯

  ----------比如被測代碼中需要依賴第三方接口傳回值進行邏輯處理,可能因為網絡或者其他環境因素,調用第三方經常會中斷或者失敗,無法對被測單元進行測試,這個時候就可以使用mock技術來将被測單元和依賴子產品獨立開來,使得測試可以進行下去。

  (2)被測單元依賴的子產品尚未開發完成,而被測單元需要依賴子產品的傳回值進行後續處理

  ----------比如service層的代碼中,包含對dao層的調用,但是,dao層代碼尚未實作

  (3)被測單元依賴的對象較難模拟或者構造比較複雜

  ----------比如,支付寶支付的異常條件有很多,但是模拟這種異常條件很複雜或者無法模拟,比如,查詢聚劃算的訂單結果,無法在測試環境進行模拟

  2、mock技術分類

  (1)手動構造mock對象

  ---------------比如,可以自己寫某個接口方法的實作,根據需要編寫傳回值,測試代碼中使用該實作類對象

  缺點:會增加代碼量,在寫mock對象代碼時,有可能引入錯誤

  (2)使用開源代碼提供的構造mock方法

  --------------比如easymock,提供了對接口類的模拟,能夠通過錄制、回放、檢查三步來完成大體的測試過程,可以驗證方法的調用種類、次數、順序,可以令mock對象傳回指定的值或抛出指定異常

  3、easymock使用

  (1)引入easymock

  ------------在maven工程中,通過pom配置依賴關系

  ------------在普通java工程中,通過添加外部包的方式

  (2)使用easymock過程

  1)使用easymock生成mock對象;

  pingjiadao = mockcontrol.createmock(ipingjiadao.class);

  2)設定mock對象的預期行為和輸出;

  easymock.expect(pingjiadao.getgoodpingjiarate(storeid)).andreturn(0.11);

  3)将mock對象切換到replay狀态;

  easymock.replay(pingjiadao);

  4)調用mock對象方法進行單元測試;

  storeservice.setstoredao(pingjiadao);

  double rate = storeservice.getstoregoodrate(storeid);

  5)對mock對象的行為進行驗證。

  easymock.verify(pingjiadao);

  4、其他easymock功能

  (1)特殊的mock對象:nicemock

  (2)參數比對器

  (3)重置mock對象

  (4)模拟異常抛出

  (5)設定調用次數

繼續閱讀