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

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

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

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統計

    其他鏈接

    友情鏈接

    最新評論

    easymock教程-命名mock對象

        在創建mock對象的時候,我們可以命名mock對象。

        前面我們談到easymock中有三種mock對象,分別用下面三個方法創建:

    createMock(Class<T> toMock)
    createStrictMock(Class
    <T> toMock)
    createNiceMock(Class
    <T> toMock)

        帶有命名功能的方法也有對應的三種:

    createMock(String name, Class<T> toMock)
    createStrictMock(String name, Class
    <T> toMock)
    createNiceMock(String name, Class
    <T> toMock)

        命名mock對象有什么好處呢?其實就是一點,即在當測試案例因為某個mock對象的狀態或行為不符合要求而失敗的時候,在異常信息里面可以輸出這個mock對象的名稱。

        我們用實際的例子來看,同樣是創建一個mock對象,然后調用一個沒有record的方法,easymock報錯退出的測試案例。

    1. 不命名

        Service service = EasyMock.createMock(Service.class);

        異常信息如下:

    java.lang.AssertionError:
      Unexpected method call execute():
     at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
     at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:73)
     at net.sourcesky.study.easymock.tutorial.$Proxy4.execute(Unknown Source)
     at net.sourcesky.study.easymock.tutorial.NamingMockTest$Business.execute(NamingMockTest.java:11)
     at net.sourcesky.study.easymock.tutorial.NamingMockTest.testExecute(NamingMockTest.java:31)
     ......

        這里的錯誤信息"Unexpected method call execute()",只指出了發生錯誤的是execute()方法,并未指出具體是哪個mock對象。
       
        當測試案例簡單時,比如就一兩個mock對象,我們可以直接從方法名上就看出是哪個mock對象。但是當mock對象多了之后,尤其是方法很多的時候,就會浪費時間。


    2. 命名后

    Service service = EasyMock.createMock("service", Service.class);

        異常信息如下:

    java.lang.AssertionError:
      Unexpected method call service.execute():
     at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
     at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:73)
     at net.sourcesky.study.easymock.tutorial.$Proxy4.execute(Unknown Source)
     at net.sourcesky.study.easymock.tutorial.NamingMockTest$Business.execute(NamingMockTest.java:11)
     at net.sourcesky.study.easymock.tutorial.NamingMockTest.testExecute(NamingMockTest.java:30)

        差別只在錯誤信息中"Unexpected method call serviceMock.execute()" 包含serviceMock的字樣,因此我們可以快遞定位到具體的mock對象。

        命名mock對象在初次編寫測試案例時用處還不是很明顯,因為編寫者當時肯定對代碼很熟悉。但是當另外一個開發人員因為某此修改代碼造成測試案例不能通過時,由于這個開發人員對代碼的熟悉程度不夠,因此命名mock對象可以對他有所幫助,方便維護。

        命名之后的mock對象,還有一個特殊的地方就是toString()方法將返回該mock對象的名稱,以代碼為例:

            Service service = EasyMock.createMock("service", Service.class);
            System.out.println(service.toString());

        輸出就是"service",對比不命名mock對象的情況:

            Service service = EasyMock.createMock(Service.class);
            System.out.println(service.toString());

        得到的輸出是"EasyMock for interface net.sourcesky.study.easymock.tutorial.NamingMockTest$Service".

     

    posted on 2010-11-29 16:34 sky ao 閱讀(2490) 評論(1)  編輯  收藏 所屬分類: software test

    評論

    # re: easymock教程-命名mock對象 2010-11-30 11:41 百思寒羽絨被

    學習了,呵呵  回復  更多評論   

    主站蜘蛛池模板: 亚洲人成人无码.www石榴| 亚洲国产女人aaa毛片在线| 亚洲色大成网站www尤物| 16女性下面无遮挡免费| 91亚洲自偷手机在线观看| 久久国产乱子免费精品| 911精品国产亚洲日本美国韩国| 国产麻豆成人传媒免费观看| 日韩伦理片电影在线免费观看| 亚洲av区一区二区三| 边摸边吃奶边做爽免费视频99| 久久毛片免费看一区二区三区| 免费视频爱爱太爽了| 亚洲卡一卡2卡三卡4麻豆| 在线观看免费毛片| 亚洲国产精品自在自线观看| 午夜高清免费在线观看| 国产亚洲视频在线观看| 亚洲精品国产成人片| 91精品国产免费久久国语蜜臀| 亚洲av午夜精品一区二区三区 | 在线播放亚洲精品| 日韩免费视频播播| 窝窝影视午夜看片免费| 亚洲gv白嫩小受在线观看| 免费观看无遮挡www的视频 | 777亚洲精品乱码久久久久久 | 亚洲乱码中文字幕手机在线| 皇色在线免费视频| 噜噜噜亚洲色成人网站∨| 在线免费一区二区| 在线看片免费人成视频久网下载 | 久久精品免费全国观看国产| 亚洲精品国产suv一区88 | 久久这里只精品热免费99| 亚洲天堂视频在线观看| 成人免费无遮挡无码黄漫视频| 亚洲精品日韩专区silk| 精品国产麻豆免费网站| 99在线热播精品免费99热| 亚洲熟妇AV乱码在线观看|