qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          接口測試從零開始系列_mock技術(shù)使用

           1、什么情況下會使用mock技術(shù)

            (1)需要將當(dāng)前被測單元和其依賴模塊獨(dú)立開來,構(gòu)造一個獨(dú)立的測試環(huán)境,不關(guān)注被測單元的依賴對象,只關(guān)注被測單元的功能邏輯

            ----------比如被測代碼中需要依賴第三方接口返回值進(jìn)行邏輯處理,可能因為網(wǎng)絡(luò)或者其他環(huán)境因素,調(diào)用第三方經(jīng)常會中斷或者失敗,無法對被測單元進(jìn)行測試,這個時候就可以使用mock技術(shù)來將被測單元和依賴模塊獨(dú)立開來,使得測試可以進(jìn)行下去。

            (2)被測單元依賴的模塊尚未開發(fā)完成,而被測單元需要依賴模塊的返回值進(jìn)行后續(xù)處理

            ----------比如service層的代碼中,包含對Dao層的調(diào)用,但是,DAO層代碼尚未實現(xiàn)

            (3)被測單元依賴的對象較難模擬或者構(gòu)造比較復(fù)雜

            ----------比如,支付寶支付的異常條件有很多,但是模擬這種異常條件很復(fù)雜或者無法模擬,比如,查詢聚劃算的訂單結(jié)果,無法在測試環(huán)境進(jìn)行模擬

            2、Mock技術(shù)分類

            (1)手動構(gòu)造mock對象

            ---------------比如,可以自己寫某個接口方法的實現(xiàn),根據(jù)需要編寫返回值,測試代碼中使用該實現(xiàn)類對象

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

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

            --------------比如easyMock,提供了對接口類的模擬,能夠通過錄制、回放、檢查三步來完成大體的測試過程,可以驗證方法的調(diào)用種類、次數(shù)、順序,可以令Mock對象返回指定的值或拋出指定異常

            3、EasyMock使用

            (1)引入easyMock

            ------------在maven工程中,通過pom配置依賴關(guān)系

          <dependency>
              <groupId>org.easymock</groupId>
              <artifactId>easymock</artifactId>
              <version>3.0</version>
              <scope>test</scope>
          </dependency>

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

            (2)使用easyMock過程

            1)使用EasyMock生成Mock對象;
            pingJiaDao = mockControl.createMock(IPingJiaDao.class);

            2)設(shè)定Mock對象的預(yù)期行為和輸出;
            EasyMock.expect(pingJiaDao.getGoodPingJiaRate(storeId)).andReturn(0.11);

            3)將Mock對象切換到Replay狀態(tài);
            EasyMock.replay(pingJiaDao);

            4)調(diào)用Mock對象方法進(jìn)行單元測試
            storeService.setStoredao(pingJiaDao);
            double rate = storeService.getStoreGoodRate(storeId);

            5)對Mock對象的行為進(jìn)行驗證。
            EasyMock.verify(pingJiaDao);

            4、其他easyMock功能

            (1)特殊的mock對象:niceMock
            (2)參數(shù)匹配器
            (3)重置mock對象
            (4)模擬異常拋出
            (5)設(shè)置調(diào)用次數(shù)

          posted on 2011-12-09 16:32 順其自然EVO 閱讀(1162) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 上林县| 丰原市| 应用必备| 绿春县| 双鸭山市| 连江县| 鄂托克旗| 青冈县| 任丘市| 安阳市| 靖宇县| 修水县| 沂南县| 长寿区| 阿拉善右旗| 龙海市| 锡林郭勒盟| 贡山| 曲麻莱县| 集安市| 辛集市| 怀宁县| 库尔勒市| 论坛| 嘉峪关市| 凯里市| 静宁县| 五峰| 象州县| 全南县| 开封县| 阜新市| 鸡泽县| 灵台县| 建瓯市| 巨鹿县| 安泽县| 栖霞市| 壤塘县| 建昌县| 黄梅县|