mock測試

mock測試

mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來創建以便測試的測試方法。

基本介紹

  • 中文名:mock測試
  • 作用:虛擬某些特定對象以便測試
  • 使用範疇:真實對象不可確定,不可預測時
  • 關鍵步驟:使用一個接口來描述對象
測試介紹,對象,對象使用範疇,關鍵步驟,測試工具,對象實例,Erlang版本,

測試介紹

對象

這個虛擬的對象就是mock對象。mock對象就是真實對象在調試期間的代替品。

對象使用範疇

真實對象具有不可確定的行為,產生不可預測的效果,(如:股票行情,天氣預報)真實對象很難被創建的 真實對象的某些行為很難被觸發真實對象實際上還不存在的(和其他開發小組或者和新的硬體打交道)等等。

關鍵步驟

使用一個接口來描述這個對象。在產品代碼中實現這個接口,在測試代碼中實現這個接口,在被測試代碼中只是通過接口來引用對象,所以它不知道這個引用的對象是真實對象,還是mock對象。

測試工具

使用Mock Object進行測試,主要是用來模擬那些在套用中不容易構造(如HttpServletRequest必須在Servlet容器中才能構造出來)或者比較複雜的對象(如JDBC中的ResultSet對象)從而使測試順利進行的工具。
目前,在Java陣營中主要的Mock測試工具有JMock,MockCreator,Mockrunner,EasyMock,MockMaker等,在微軟的.Net陣營中主要是Nmock,.NetMock等。

對象實例

一個鬧鐘根據時間來進行提醒服務,如果過了下午5點鐘就播放音頻檔案提醒大家下班了,如果我們要利用真實的對象來測試的話就只能苦苦等到下午五點,然後把耳朵放在音箱旁,我們應該利用mock對象來進行測試,這樣我們就可以模擬控制時間了,而不用苦苦等待時鐘轉到下午5點鐘了。下面是代碼:
public abstract class Environmental{    boolean playedWav=false;    public abstract  long getTime();    public abstract  void  playWavFile(String fileName);    public abstract  boolean  wavWasPlayed();    public abstract  void  resetWav();}真實的實現代碼:
public class SystemEnvironment extends Environmental{    public long getTime(){        return System.currentTimeMillis();    }    public void playWavFile(String  fileName){        playedWav=true;    }    public boolean  wavWasPlayed(){        return playedWav;    }    public void  resetWav(){        playedWav=false;    }}下面是mock對象:
public class MockSystemEnvironment extends Environmental{    private long currentTime;    public long getTime(){        return currentTime;    }    public void setTime(long  currentTime){        this.currentTime=currentTime;    }    public void playWavFile(String  fileName){        playedWav=true;    }    public boolean wavWasPlayed(){        return playedWav;    }    public void  resetWav(){        playedWav=false;    }}

Erlang版本

put(current_time,os:timestamp()),put(played_wav,false),meck:new(mock_system_environment,[non_strict]),%模擬一個系統環境meck:expect(mock_system_environment,get_time,fun()->get(current_time)end),meck:expect(mock_system_environment,set_time,fun(CurrentTime)->put(current_time,CurrentTime)end),meck:expect(mock_system_environment,play_wav_file,fun(FileName)->put(played_wav,true)end),meck:expect(mock_system_environment,wav_was_played,fun()->get(played_wav)end),meck:expect(mock_system_environment,reset_wav,fun()->put(played_wav,false)end),casemock_system_environment:wav_was_played()oftrue->mock_system_environment:reset_wav();false->mock_system_environment:play_wav_file("mm.wav")end.
mock-
複合形 comb.form
1. 表示"模仿","假的"
mock測試可翻譯為mock-test

熱門詞條

聯絡我們