国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Mockito自定義verify參數Matcher

2019-11-14 21:52:52
字體:
來源:轉載
供稿:網友
Mockito自定義verify參數Matcher 2014-11-12 15:13 by 破狼, ... 閱讀, ... 評論, 收藏, 編輯

在TDD開發中,也許我們會遇見對一些重要的無返回值的行為測試,比如在用戶的積分DB中增加用戶的積分,這個行為對于我們的業務具有重要的價值,所以我們也希望能測試覆蓋這部分業務價值。這個時候我們就得使用mockito帶來的verify斷言,但verify的參數斷言主要有eq,或者any常見的方式。有時我們也希望能夠斷言對象的一部分屬性,比如上文的積分數值,對于不同的場景增加的用戶積分可能不同。

回到Mockito的參數Matcher,Mockito給我們提供了ArgumentMatcher,以供我們來擴展Matcher。下面假設一個增加用戶積分的場景:

 public class Game {        PRivate String type;        private int rate;        public Game(String type, int rate) {            this.type = type;            this.rate = rate;        }        public String getType() {            return type;        }        public int getRate() {            return rate;        }    }    public class GameDao {        public void addRate(Game game) {            //TODO: insert to db        }    }

  

我們希望能夠對verify GameDao調用了addRate,并且是積分rate為特定值。

所以我們可以擴展Mockito的ArgumentMatcher:

public class PartyMatcher<T> extends ArgumentMatcher<T> {    private Object value;    private Function<T, Object> function;    public PartyMatcher(Function<T, Object> getProperty, Object value) {        this.value = value;        this.function = getProperty;    }    public static <F> PartyMatcher<F> partyMatcher(Function<F, Object> getProperty, Object value) {        return new PartyMatcher<F>(getProperty, value);    }    @Override    public boolean matches(Object o) {        return function.apply((T) o).equals(value);    }}

所以我們的測試可以如下:

    @Test    public void should_run_customer_mockito_matcher() throws Exception {        final GameDao gameDao = mock(GameDao.class);        gameDao.addRate(new Game("簽到", 7));        verify(gameDao).addRate(argThat(new PartyMatcher<Game>(new Function<Game, Object>() {            @Override            public Object apply(Game game) {                return game.getRate();            }        }, 7)));        verify(gameDao).addRate(argThat(new PartyMatcher<Game>(new Function<Game, Object>() {            @Override            public Object apply(Game game) {                return game.getType();            }        }, "簽到")));    }

  

Mockito給我們提供了很多關于Matcher擴展的方法,本文只是ArgumentMatcher的實例。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 图木舒克市| 广汉市| 营口市| 子长县| 桑日县| 库尔勒市| 新巴尔虎右旗| 壶关县| 寻甸| 黄大仙区| 长海县| 三河市| 涞水县| 任丘市| 濉溪县| 磴口县| 灵璧县| 滨海县| 额尔古纳市| 台前县| 莒南县| 荥经县| 英吉沙县| 微山县| 宁陵县| 沾益县| 措美县| 新乐市| 潼南县| 都兰县| 梅河口市| 寿宁县| 辉县市| 琼海市| 开阳县| 娄底市| 沁水县| 龙岩市| 海晏县| 江源县| 长沙市|