<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    WEB開發(fā) de 點(diǎn)滴

    by sanwish

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      38 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks
    背景:
    EasyMock 2 版本必須要 JDK5 才能使用 EasyMock 1.2 可以在 JDK 1.4 使用
    也可以使用 Retrotranslator 將 EasyMock 2 版本改為 JDK 1.4 也可以使用的。
    目前使用的是 EasyMock 2.2

    準(zhǔn)備:
    先弄個接口 Haha 用來 Mock 的,兩個方法
    void haha(String s);
    String hehe(String s);

    開始 Mock:

    靜態(tài)導(dǎo)入 EasyMock
    import static org.easymock.EasyMock.*;

    然后
    Haha haha=createMock(Haha.class);

    無返回值的調(diào)用可以直接調(diào)用 Mock 方法

    haha.haha("haha");

    有返回值的可以

    expect(haha.hehe("hehe")).andReturn("ok");

    這樣做完后

    你要 replay(haha); 一下,表示錄完 mock ,準(zhǔn)備重放了。

    就可以調(diào)用 haha.haha("haha") 了,同樣的,調(diào)用 haha.hehe("hehe") 的返回值是 "ok"

    全部調(diào)用完了,使用 verify(haha); 查看一下預(yù)期的調(diào)用是不是都調(diào)了,如果預(yù)期要調(diào)用一次,卻沒調(diào),那就會 AssertionError 哦。

    調(diào)用次數(shù)

    上面這些都是默認(rèn)調(diào)用一次,就相當(dāng)于 expect(haha.hehe("hehe")).andReturn("ok").times(1); 或 expect(haha.hehe("hehe")).andReturn("ok").once();

    如果想調(diào)用任意次,就 expect(haha.hehe("hehe")).andReturn("ok").anyTimes();

    如果想最少調(diào)用一次,就 expect(haha.hehe("hehe")).andReturn("ok").atLeastOnce();

    如果想調(diào)用 1 至 3 次,就 expect(haha.hehe("hehe")).andReturn("ok").times(1,3);

    預(yù)期的結(jié)果

    還可以 expect(haha.hehe("hehe")).andReturn("ok").andReturn("ok too").andThrow(new RuntimeException());

    這樣,第一次調(diào)用 haha.hehe("hehe") 時返回 "ok" ,第二次返回 "ok too",第三次調(diào)用就比較慘了,會拋出一個 RuntimeException,需要注意
    的是,如果拋出的異常是 unchecked 的,就是 Runtime 的,就隨便拋,如果是 checked 的,那就一定要拋這個方法定義的,否則會在 andThrow 這行出 IllegalArgumentException 。

    終極解決辦法還可以使用 andAnswer(IAnswer<T> answer) 傳一個實(shí)現(xiàn) IAnswer 接口的實(shí)例,這個接口只有一個方法
    T answer() throws Throwable;
    隨便你返回什么,或是拋出什么異常。

    調(diào)用順序

    不 過如上面所說,haha.haha("haha") 與 haha.hehe("hehe") 是沒有順序的,將 createMock 改成 createStrictMock 或在 createMock 后面加一行 checkOrder(haha,true) 就可以了,這時,就一定要按照定義的順序來調(diào)用了。

    如果多個不同的 mock 也要保證順序呢?那就不能使用 createMock 來創(chuàng)建這些 mock 了,因?yàn)槊看?createMock 都會使用一個新的 IMocksControl 實(shí)例來單獨(dú)控制這個 mock ,我們希望將多個 mock 用同一個 IMocksControl 控制,只需要

    IMocksControl ctrl = createStrictControl();
    Haha haha1= ctrl.createMock(Haha .class);
    Haha haha2 = ctrl.createMock(Haha .class);

    haha1.haha("haha1");
    haha2.haha("haha2");

    ctrl.replay();

    就可以了

    預(yù)期的參數(shù)

    剛才 haha.haha("haha") 中的 "haha" 就是預(yù)期的參數(shù),EasyMock 提供了很多預(yù)期參數(shù)的方法,比如 haha.haha(eq("haha")),與前面的方法功能完全一樣
    haha.haha((String)anyObject) 隨便你傳什么參數(shù)都沒問題。
    haha.haha(not(eq("haha"))) 這個只要不傳 haha ,其它什么都成

    同 樣可以自定義,只要調(diào)用 ??? public static void reportMatcher(IArgumentMatcher matcher) 方法,將自定義的 IArgumentMatcher 傳進(jìn)去就可以了,這個接口有兩個方法 boolean matches(Object argument)?? 和 void appendTo(StringBuffer buffer) 第一個方法的參數(shù)是調(diào)用實(shí)際傳入的值,返回是否匹配,第二個方法是錯誤時向 buffer 中 append 錯誤信息。

    將方法弄成 Stub

    Stub 方法,我想應(yīng)該就是隨便調(diào),愛怎么調(diào)就怎么調(diào),返回的都是那個值,最后也不會驗(yàn)證到底調(diào)用了多少次。
    如果想把一個方法弄成 Stub,無返回值的只要 asStub() 就是 expect(haha.haha("haha")).asStub() ,有返回值的就 andStubReturn() , andStubAnswer() 這樣就可以了。

    友好的Mock

    我們使用 createMock 創(chuàng)建出來的 mock 對象,如果沒有錄過,調(diào)用這個方法都會出 AssertionError ,但如果使用 createNiceMock 就不會了,會返回 0 , null , false 這樣的。
    posted on 2008-11-07 09:56 sanwish 閱讀(452) 評論(0)  編輯  收藏 所屬分類: easymock

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色婷婷六月亚洲婷婷丁香| 亚洲AV无一区二区三区久久| 亚洲成a人片在线不卡| 在线免费观看亚洲| 亚洲色图黄色小说| 国产91色综合久久免费分享| 亚洲精品国产成人中文| 亚洲一区二区三区免费观看| 亚洲毛片一级带毛片基地| 4虎永免费最新永久免费地址| 亚洲国产人成在线观看| 成人性生活免费视频| 亚洲AV无码XXX麻豆艾秋| 四虎精品亚洲一区二区三区| 一级毛片在线免费视频| 亚洲精品乱码久久久久久| 久9这里精品免费视频| 亚洲精品熟女国产| 好吊妞在线新免费视频| 免费无毒a网站在线观看| 色噜噜亚洲精品中文字幕| 182tv免费观看在线视频| 亚洲色偷偷综合亚洲av78| 又粗又大又硬又爽的免费视频| 国产成人精品免费视频大全| 亚洲va在线va天堂va四虎| 香蕉97超级碰碰碰免费公| 国产亚洲一卡2卡3卡4卡新区| 亚洲免费在线观看| 中文字幕在线免费| 国产亚洲欧美日韩亚洲中文色| 亚洲人成人网站在线观看| 久久精品人成免费| 粉色视频成年免费人15次| 国产亚洲AV无码AV男人的天堂| 噼里啪啦免费观看高清动漫4 | 精品国产免费人成电影在线观看| 亚洲91精品麻豆国产系列在线| 日韩亚洲国产二区| 亚洲免费网站在线观看| 亚洲AV成人无码网天堂|