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

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

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

    Sky's blog

    我和我追逐的夢

    常用鏈接

    統(tǒng)計

    其他鏈接

    友情鏈接

    最新評論

    easymock教程-參數(shù)匹配

        easymock中提供了非常多的方法來實現(xiàn)參數(shù)匹配,基本能滿足一般參數(shù)匹配的要求。

        我們來具體看一下到底有哪些方法:

    (1) 基于基本類型的比較

            1. eq(X value)方法, X 可以是boolean,byte,char, double,float,int,long,short,T

                有多個重載方法,支持基本類型如boolean, byte,char, double,float,int, long,short,后面會介紹它也支持Object比較。

                這個eq()方法的用法直接了當,基本數(shù)值直接比較數(shù)值,對于非整型的double和float,由于存在精度的問題,因此增加了以下兩個方法來指定比較精度。

    eq(double value, double delta) 
    eq(
    float value, float delta) 


     2. aryEq(X[] values) X 可以是boolean,byte,char, double,float,int,long,short,T

                這個是eq(X value)方法的數(shù)組版本,要求比較的兩個數(shù)組擁有相同的長度,然后每個元素都"相同",即都可以滿足eq(X value)方法。

                注意到double和float并沒有像eq(X value)方法那樣提供可以設(shè)置精度的重載版本,不知道在數(shù)組比較時如何去設(shè)置容許精度。

     3. gt(X value), lt(X value), X 可以是byte,double,float,int,long,short

                這兩個方法用于參數(shù)的大小匹配,適用于數(shù)值型的基本類型如byte,double,float,int,long,short。

     4. geq(X value), leq(X value)

                類似gt()和lt(),無非是將">"改為">=", "<"改為"<="。

     5. anyX(), X可以是Boolean, Byte, Char, Double, Float, Int, Long, Short

                這是一個寬松的匹配方法,任何數(shù)值都被視為匹配OK。這個方法在我們不介意參數(shù)值時特別有用。

    (2) 基于對象的比較

     1. eq(T value)方法

                和基本類型類似,不過對于Object,是通過調(diào)用equals()方法來進行比較。

     2. same(T value) 方法

                和eq()不同,same()是通過比較對象引用來進行比較的。類似java代碼中, a.equals(b)和a == b的差別。

     3. anyObject() 和 anyObject(Class<T> clazz)

                類似基本類型的any***()方法,非常寬松,在我們不介意參數(shù)值時使用。

                使用方式有三種

    (T)EasyMock.anyObject() // 強制類型轉(zhuǎn)換
    EasyMock.<T> anyObject() // 固定返回的泛型
    EasyMock.anyObject(T.class) // 在參數(shù)中指定返回的泛型 
            4. isA(Class<T> clazz)

                和anyObject(Class<T> clazz) 非常,唯一一個差別在于當輸入?yún)?shù)為null時,anyObject(Class<T> clazz)返回true而isA(Class<T> clazz) 返回false。

    (3) 邏輯計算

        easymock支持在參數(shù)匹配時進行一些簡單的邏輯計算, 如and(), or (), not()。

        not()容易理解,取反而已。or()也容易理解,兩個匹配方法匹配一個即可。

        但是and()方法我沒能理解,不知道該怎么用,兩個匹配方法同時匹配? 有知道的朋友,還望指教。 

     

       此外在參數(shù)匹配中,有幾個特殊角色,享受的待遇與眾不同,easymock為它們提供了專有方法。

    1. Comparable

            對于實現(xiàn)了Comparable接口的對象,easymock提供了一系列的專用方法來處理,包括eq, gt, lt, geq, leq:

    cmpEq(Comparable<T> value)
    gt(Comparable<T> value)
    lt(Comparable<T> value)
    geq(Comparable<T> value)
    leq(Comparable<T> value)

            這個特殊處理非常合理,本來Comparable接口就提供了比較的功能,在參數(shù)匹配時應(yīng)該容許直接使用。

    2. string

            由于字符串匹配使用的場景非常多,因此easymock為此也提供了幾個常見的參數(shù)匹配方法:

    contains(String substring)
    startsWith(String prefix)
    endsWith(String suffix)
    find(String regex)

     其中contains/startsWith/endsWith是簡單的字符串查找,而find()則通過支持正則表達式來提供復(fù)雜匹配。

    3. null

            對于Object匹配,很常見的一個場景就是輸入的參數(shù)為null,easymock中提供isNull() 和 notNull() 兩個方法來完成對null值的匹配。

            開發(fā)中,經(jīng)常會遇到下面這種場景,期望輸入的參數(shù)滿足isA()或者容許為null。而直接使用isA(),是不能支持null的,即如果參數(shù)為null時isA()會報不匹配。這個不是easymock的bug,而是刻意而為,解決的方法是使用 or(isA(...), isNull(...))或者anyObject()。

     

    service.execute((ClassA) EasyMock.or(EasyMock.isA(ClassA.class), EasyMock.isNull()));
    service.execute(EasyMock.anyObject(ClassA.
    class));


     

    posted on 2010-11-29 18:57 sky ao 閱讀(4923) 評論(2)  編輯  收藏 所屬分類: software test

    評論

    # re: easymock教程-參數(shù)匹配 2010-11-30 19:04 xu

    我的理解是:and的情況是判斷傳入的參數(shù)的情況,如判斷參數(shù)的值是否既大于1又小于5,如下所示:
    expect(a.getB(and(lt(5), gt(1)), and(lt(5), gt(1)))).andReturn("str");  回復(fù)  更多評論   

    # re: easymock教程-參數(shù)匹配[未登錄] 2010-11-30 22:19 sky

    恩,很有道理,是我沒有想到區(qū)間的問題。

    非常感謝!  回復(fù)  更多評論   

    主站蜘蛛池模板: 久久精品国产亚洲精品2020| 久久亚洲AV午夜福利精品一区| 亚洲sss综合天堂久久久| 国产四虎免费精品视频| 亚洲AV色吊丝无码| 免费无码A片一区二三区| 亚洲日韩av无码中文| 日韩精品无码人妻免费视频| 亚洲JLZZJLZZ少妇| 一级毛片直播亚洲| aaa毛片免费观看| 亚洲电影一区二区| 国产日本一线在线观看免费| 亚洲日韩一区二区三区| 日韩亚洲国产二区| 色www永久免费网站| 久久精品国产亚洲AV网站| 国产黄色免费网站| 亚洲高清一区二区三区电影| 亚洲日本韩国在线| 无码日韩精品一区二区三区免费 | 久久亚洲2019中文字幕| 国产午夜成人免费看片无遮挡| 亚洲人成在线播放网站岛国| 69成人免费视频| 深夜免费在线视频| 久久精品国产精品亚洲毛片| 久久久久国色AV免费看图片| 人禽伦免费交视频播放| 亚洲人成电影在在线观看网色| 毛片视频免费观看| 精品一区二区三区高清免费观看| 亚洲视频在线观看网址| 国产99视频精品免费视频7| 免费看无码特级毛片| 亚洲综合色7777情网站777| 男人的天堂亚洲一区二区三区 | 精品一区二区三区无码免费直播| 亚洲精品无码乱码成人 | 亚洲色偷偷综合亚洲AV伊人| www视频免费看|