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

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

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

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統計

    其他鏈接

    友情鏈接

    最新評論

    easymock教程-class mocking

        前面的例子中,mock的對象都是基于interface,雖然說我們總是強調要面對接口編程,而不要面對實現,但是實際開發中不提取interface而直接使用class的場景非常之多。尤其是一些當前只有一個明確實現而看不到未來擴展的類,是否應該提取interface或者說是否應該現在就提取interface,總是存在爭論。

        這種情況下,我們就會面臨主要測試對象依賴到一個具體類而不是interface的情況,easymock中通過class extension 來提供對class mocking的支持。

    1. class mocking的使用

        easymock class extension的使用方式和普通的interface mock完全一致,基本上easymock中有的功能easymock class extension都同樣提供,而且所有的類名和方法名都保持一致。

         ClassA impl = Easymock.createMock(ClassA.class);
                Easymock.expect(impl.getById("1001")).andReturn(...);
                Easymock.replay(impl);
       
        唯一的差異在于,easymock class extension的java package和easymock不同,easymock是org.easymock.*, 而 easymock class extension是org.easymock.classextension.*,典型如 org.easymock.classextension.Easymock 對應 org.easymock.Easymock。另外在發布時,兩者是分開發布的,easymock.jar 和 easymockclassextension.jar,需要根據需要分別導入,或者必要時同時導入。

    2. 3.0新版本和向后兼容

        我們來回顧一下easymock的歷史版本: easymock 1.* 非常久遠了,已經沒有人在用。2.0版本在2005-12-24發布,基于jdk1.5,之后陸續發布的2.1/2.2/2.3/2.4/2.5等幾個版本中,都提供了對應版本的easymock class extension。easymock 3.0 版本是最新版本,2010-05-08 發布,主要改進就是將easymock class extension的功能合并到easymock中,以后只要使用easymock就可以提供class mocking的功能。當然為了兼容2.*下的舊代碼,依然提供了EasyMock 3.0 Class Extension代理到easymock 3.0。

        3.0版本之后,easymock class extension的class mocking功能已經無縫集成到easymock中,因此代碼的編寫簡潔了很多,強烈建議新用戶直接使用3.0版本。對于使用2.*版本的舊有代碼,easymock提供了easymock class extension的3.0版本,兼容2.*的代碼,底層實現實際是代理給easymock3.0。因此2.*版本easymock class extension的用戶可以通過簡單的升級easymock class extension到3.0即可平滑升級,之后再逐漸替換掉easymock class extension的代碼。

    3. class mocking的限制

        class mocking是有一些限制的,

        1) 不能mock類的 final方法

     如果final方法被調用,則只能執行原有的正常代碼。

        2) 不能mock類的static 方法。

            同樣如果private方法被調用,只能執行原有的正常代碼。


        3) 不能mock類的一些特殊方法: equals(), toString()和hashCode().

     原因是easymock在實現是為每個class mock對象提供了內建的以上三個方法。需要強調的是,對于基于interface的mock,這個限制也是同樣存在的,即使以上三個方式是interface定義的一部分。


        在使用時需要避開這種場景,或者組合使用其他的mock 框架比如jmockit來mock private方法和final方法。

     

     

     

     

     

     

     

     

     

     

     

    posted on 2010-10-26 16:54 sky ao 閱讀(2021) 評論(0)  編輯  收藏 所屬分類: software test

    主站蜘蛛池模板: 91av免费在线视频| 久久久久亚洲精品天堂久久久久久| 国产JIZZ中国JIZZ免费看| 亚洲一区二区三区四区视频| 亚洲级αV无码毛片久久精品| 国产成人免费片在线视频观看| 噼里啪啦免费观看高清动漫4| 十八禁在线观看视频播放免费| 免费视频精品一区二区| 亚洲精品无码久久久久秋霞 | 亚洲mv国产精品mv日本mv| 亚洲日韩中文字幕在线播放| 亚洲国产日韩在线观频| 精品久久久久久久免费人妻 | 久久亚洲国产精品成人AV秋霞| 在线亚洲午夜理论AV大片| 亚洲人成影院在线无码观看| 国产大片91精品免费观看男同 | 亚洲乱码中文字幕小综合| 亚洲avav天堂av在线不卡| 亚洲韩国精品无码一区二区三区| 久久亚洲色一区二区三区| 亚洲日本在线观看视频| 亚洲人成影院在线无码观看| 亚洲国产成人乱码精品女人久久久不卡 | 国产免费网站看v片在线| 精品97国产免费人成视频| 一级美国片免费看| 一边摸一边桶一边脱免费视频 | 亚洲精品tv久久久久| 免费国产高清视频| 亚洲А∨精品天堂在线| 亚洲AⅤ永久无码精品AA| 亚洲国产综合无码一区二区二三区| 免费永久国产在线视频| 亚洲国产免费综合| 国产亚洲av片在线观看18女人 | a级在线观看免费| 久久国产精品2020免费m3u8 | 亚洲国产成人一区二区精品区| 久久青青成人亚洲精品|