少年阿賓

          那些青春的歲月

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

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

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

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

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

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

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

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

            2、Mock技術(shù)分類

            (1)手動(dòng)構(gòu)造mock對(duì)象

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

            缺點(diǎn):會(huì)增加代碼量,在寫(xiě)mock對(duì)象代碼時(shí),有可能引入錯(cuò)誤

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

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

            3、EasyMock使用

            (1)引入easyMock

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

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

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

            (2)使用easyMock過(guò)程

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

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

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

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

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

            4、其他easyMock功能

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

          posted on 2013-04-20 15:19 abin 閱讀(410) 評(píng)論(0)  編輯  收藏 所屬分類: easyMock
          主站蜘蛛池模板: 平邑县| 汪清县| 高邮市| 湖南省| 仪陇县| 冀州市| 宜良县| 抚宁县| 大埔县| 桑日县| 临猗县| 平度市| 绥德县| 夏河县| 玛沁县| 门源| 台北市| 芮城县| 和平区| 濉溪县| 金华市| 鄂托克前旗| 宜章县| 亳州市| 承德县| 石河子市| 华亭县| 德州市| 临猗县| 民权县| 阿尔山市| 西畴县| 芜湖市| 德格县| 桦南县| 宜城市| 合山市| 长治县| 通化县| 平阴县| 县级市|