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

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

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

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0
    對程序進行單元測試時,有時我們會遇到一些小麻煩,比如某些操作十分耗時,有些依賴的對象不易獲取等等,這時我們就可以通過Groovy Mock或Groovy Stub來解決這些問題。Mock對方法調用的次數十分敏感,如果程序中調用的次數不在期望的調用次數范圍內,則會拋出異常以致測試失敗;而Stub僅僅是起到‘替身’的作用,它并不關心方法調用與否,即使方法一次都沒被調用,也不會拋出異常導致測試失敗。

    下面讓我們來看一個實際的例子吧:
    import?groovy.mock.interceptor.*

    class?User?{
    ????String?name
    ????String?address
    ????String?toString()?{
    ????????
    "Name:?$name,?Address:?$address"
    ????}
    }

    class?UserDao?{
    ????User?findUserByName(String?name)?{
    ????????
    if?('山風小子'?==?name)
    ????????????
    return?new?User(name:name,?address:'Shanghai')
    ????????
    else
    ????????????
    return?new?User(name:'Anonymous?User',?address:'Unknown')
    ????}
    }

    class?ShowUserInfoService?{
    ????UserDao?userDao?
    =?new?UserDao()
    ????def?showInfo(String?name)?{
    ????????User?user?
    =?userDao.findUserByName('山風小子')
    ????????println?user
    ????}
    }



    /*
    ??? 平時下面這些代碼寫于單元測試中,為了簡潔起見,單獨抽取出來
    */


    def?userDaoMock?
    =?new?MockFor(UserDao)
    /*
    ????UserDao對象中的findUserByName方法必須被調用1~2次,否則測試失敗
    ????同時將findUserByName方法的實現替換為return?new?User(name:'mock?user',?address:'Unknown')
    */
    userDaoMock.demand.findUserByName(
    1..2)?{?String?name?->
    ????
    return?new?User(name:'mock?user',?address:'Unknown')
    }

    userDaoMock.use?{
    ????def?showUserInfoService?
    =?new?ShowUserInfoService()
    ????showUserInfoService.showInfo(
    '山風小子')
    ????showUserInfoService.showInfo(
    'Daniel.Sun')
    ????
    //showUserInfoService.showInfo('BlueSUN')
    }

    def?userDaoStub?
    =?new?StubFor(UserDao)
    /*
    ????僅僅將findUserByName方法的實現替換為return?new?User(name:'stub?user',?address:'Unknown')
    ????即使findUserByName方法不被調用,測試也不會失敗
    */
    userDaoStub.demand.findUserByName?{?String?name?
    ->
    ????
    return?new?User(name:'stub?user',?address:'Unknown')
    }

    userDaoStub.use?{
    ????def?showUserInfoService?
    =?new?ShowUserInfoService()
    ????showUserInfoService.showInfo(
    '山風小子')
    }

    運行結果:
    Name:?mock?user,?Address:?Unknown
    Name:?mock?user,?Address:?Unknown
    Name:?stub?user,?Address:?Unknown


    附:朝花夕拾——Groovy & Grails
    posted on 2008-06-13 23:25 山風小子 閱讀(4022) 評論(2)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 国产亚洲成在线播放va| 亚洲精品无码久久毛片波多野吉衣| 在线亚洲高清揄拍自拍一品区| 最近2019年免费中文字幕高清| 久久久久亚洲精品影视| 今天免费中文字幕视频| 亚洲电影一区二区三区| 久久久久久国产精品免费无码| 亚洲国产日韩一区高清在线| 性xxxxx大片免费视频| 久久久久亚洲精品无码蜜桃| 午夜性色一区二区三区免费不卡视频 | 特级毛片免费观看视频| 国产免费小视频在线观看| 特级毛片在线大全免费播放| 亚洲精品久久久www| 黄色网站软件app在线观看免费| 亚洲AV永久无码精品| 久久一本岛在免费线观看2020| 亚洲福利电影在线观看| 免费看美女让人桶尿口| 免费无码专区毛片高潮喷水| 国产亚洲精品资在线| 18禁男女爽爽爽午夜网站免费| 亚洲乱码在线观看| 亚洲不卡无码av中文字幕| 182tv免费视频在线观看| 亚洲an日韩专区在线| 免费一级毛片在级播放| 国产免费网站看v片在线| 亚洲一区二区三区久久久久| 免费人成在线观看播放国产| 久久九九久精品国产免费直播| 亚洲一区二区中文| 美女黄网站人色视频免费国产| 国产精品高清免费网站| 亚洲成av人片在线看片| mm1313亚洲精品无码又大又粗| 亚欧日韩毛片在线看免费网站| 亚洲精品精华液一区二区| 久久精品国产精品亚洲艾|