Sky's blog

          我和我追逐的夢(mèng)

          常用鏈接

          統(tǒng)計(jì)

          其他鏈接

          友情鏈接

          最新評(píng)論

          easymock教程-命名mock對(duì)象

              在創(chuàng)建mock對(duì)象的時(shí)候,我們可以命名mock對(duì)象。

              前面我們談到easymock中有三種mock對(duì)象,分別用下面三個(gè)方法創(chuàng)建:

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

              帶有命名功能的方法也有對(duì)應(yīng)的三種:

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

              命名mock對(duì)象有什么好處呢?其實(shí)就是一點(diǎn),即在當(dāng)測(cè)試案例因?yàn)槟硞€(gè)mock對(duì)象的狀態(tài)或行為不符合要求而失敗的時(shí)候,在異常信息里面可以輸出這個(gè)mock對(duì)象的名稱。

              我們用實(shí)際的例子來(lái)看,同樣是創(chuàng)建一個(gè)mock對(duì)象,然后調(diào)用一個(gè)沒有record的方法,easymock報(bào)錯(cuò)退出的測(cè)試案例。

          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)
           ......

              這里的錯(cuò)誤信息"Unexpected method call execute()",只指出了發(fā)生錯(cuò)誤的是execute()方法,并未指出具體是哪個(gè)mock對(duì)象。
             
              當(dāng)測(cè)試案例簡(jiǎn)單時(shí),比如就一兩個(gè)mock對(duì)象,我們可以直接從方法名上就看出是哪個(gè)mock對(duì)象。但是當(dāng)mock對(duì)象多了之后,尤其是方法很多的時(shí)候,就會(huì)浪費(fèi)時(shí)間。


          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)

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

              命名mock對(duì)象在初次編寫測(cè)試案例時(shí)用處還不是很明顯,因?yàn)榫帉懻弋?dāng)時(shí)肯定對(duì)代碼很熟悉。但是當(dāng)另外一個(gè)開發(fā)人員因?yàn)槟炒诵薷拇a造成測(cè)試案例不能通過時(shí),由于這個(gè)開發(fā)人員對(duì)代碼的熟悉程度不夠,因此命名mock對(duì)象可以對(duì)他有所幫助,方便維護(hù)。

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

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

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

                  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 閱讀(2501) 評(píng)論(1)  編輯  收藏 所屬分類: software test

          評(píng)論

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

          學(xué)習(xí)了,呵呵  回復(fù)  更多評(píng)論   

          主站蜘蛛池模板: 邵阳市| 资兴市| 兴山县| 法库县| 富阳市| 海城市| 宜城市| 天水市| 鄢陵县| 宁津县| 屏山县| 绿春县| 民丰县| 黄大仙区| 呼玛县| 兴安盟| 伽师县| 青河县| 宁陕县| 临澧县| 周口市| 沭阳县| 元朗区| 水富县| 永定县| 棋牌| 攀枝花市| 遂川县| 南京市| 广东省| 铁岭市| 梓潼县| 彩票| 漳平市| 英吉沙县| 晋州市| 普陀区| 芦溪县| 建湖县| 巴彦淖尔市| 徐闻县|