<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
    主站蜘蛛池模板: 亚洲一区二区三区深夜天堂| 亚洲精品女同中文字幕| 日韩版码免费福利视频| 国产精品亚洲午夜一区二区三区| 国产成人免费片在线观看| 精品一区二区三区免费观看 | 亚洲人成网站在线观看播放| 91麻豆国产免费观看| jizzjizz亚洲日本少妇| 亚洲精品自在在线观看| 国拍在线精品视频免费观看| 全黄A免费一级毛片| 亚洲美女精品视频| 免费观看日本污污ww网站一区| 国产精品99久久免费观看| 亚洲一区二区无码偷拍| 亚洲AV永久精品爱情岛论坛| 国语成本人片免费av无码| 三上悠亚电影全集免费| 亚洲av中文无码字幕色不卡| 亚洲成AV人片天堂网无码| 国产在线19禁免费观看国产| 59pao成国产成视频永久免费| 日本系列1页亚洲系列| 久久久久亚洲AV片无码下载蜜桃| 亚洲国产电影av在线网址| 欧美三级在线电影免费| 性xxxx视频免费播放直播 | 免费精品无码AV片在线观看| 国产精品亚洲一区二区三区| 亚洲国产成人91精品| 亚洲av永久无码精品古装片| www亚洲精品少妇裸乳一区二区 | 日本高清免费网站| 亚洲免费网站在线观看| 两个人看的www免费| 特黄aa级毛片免费视频播放| 亚洲日韩国产一区二区三区在线| 亚洲黄色免费电影| 亚洲va久久久噜噜噜久久男同| 亚洲成网777777国产精品|