使用Mockito模擬異常

接下來我們將以MyDictionary類為例進(jìn)行介紹

class MyDictionary {

    private Map<String, String> wordMap;

    MyDictionary() {
        wordMap = new HashMap<>();
    }

    public void add(final String word, final String meaning) {
        wordMap.put(word, meaning);
    }

    String getMeaning(final String word) {
        return wordMap.get(word);
    }
}

1 Mock對象模擬異常

1.1 方法返回類型非void

如果方法的返回類型非void,那么可以使用when().thenThrow()來模擬異常

    @Test(expected = NullPointerException.class)
    public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
        MyDictionary dictMock = mock(MyDictionary.class);
        when(dictMock.getMeaning(anyString())).thenThrow(NullPointerException.class);

        dictMock.getMeaning("word");
    }

1.2 方法返回類型是void

如果方法返回類型是void,則使用doThrow來模擬異常

@Test(expected = IllegalStateException.class)
public void whenConfigVoidRetunMethodToThrowEx_thenExIsThrown() {
    MyDictionary dictMock = mock(MyDictionary.class);
    doThrow(IllegalStateException.class)
      .when(dictMock)
      .add(anyString(), anyString());
 
    dictMock.add("word", "meaning");
}

1.3 模擬異常對象

我們不僅可以在thenThrow()或者doThrow() 中模擬異常類,還可以模擬異常對象。

    @Test(expected = NullPointerException.class)
    public void whenConfigNonVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() {
        MyDictionary dictMock = mock(MyDictionary.class);
        when(dictMock.getMeaning(anyString())).thenThrow(new NullPointerException("Error occurred"));

        dictMock.getMeaning("word");
    }

    @Test(expected = IllegalStateException.class)
    public void whenConfigVoidRetunMethodToThrowExWithNewExObj_thenExIsThrown() {
        MyDictionary dictMock = mock(MyDictionary.class);
        doThrow(new IllegalStateException("Error occurred")).when(dictMock)
            .add(anyString(), anyString());

        dictMock.add("word", "meaning");
    }

2 Spy對象模擬異常

Spy對象模擬異常的方式與Mock對象相同潘明,如下:

@Test(expected = NullPointerException.class)
public void givenSpy_whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
    MyDictionary dict = new MyDictionary();
    MyDictionary spy = Mockito.spy(dict);
    when(spy.getMeaning(anyString()))
      .thenThrow(NullPointerException.class);
 
    spy.getMeaning("word");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末囚衔,一起剝皮案震驚了整個濱河市锨亏,隨后出現(xiàn)的幾起案子夭坪,更是在濱河造成了極大的恐慌,老刑警劉巖绘闷,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異较坛,居然都是意外死亡印蔗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門丑勤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华嘹,“玉大人,你說我怎么就攤上這事法竞“液瘢” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵岔霸,是天一觀的道長薛躬。 經(jīng)常有香客問我,道長秉剑,這世上最難降的妖魔是什么泛豪? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮侦鹏,結(jié)果婚禮上诡曙,老公的妹妹穿的比我還像新娘。我一直安慰自己略水,他們只是感情好价卤,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渊涝,像睡著了一般慎璧。 火紅的嫁衣襯著肌膚如雪床嫌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天胸私,我揣著相機(jī)與錄音厌处,去河邊找鬼。 笑死岁疼,一個胖子當(dāng)著我的面吹牛阔涉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捷绒,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼瑰排,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暖侨?” 一聲冷哼從身側(cè)響起椭住,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎字逗,沒想到半個月后京郑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扳肛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年傻挂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挖息。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡金拒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出套腹,到底是詐尸還是另有隱情绪抛,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布电禀,位于F島的核電站幢码,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尖飞。R本人自食惡果不足惜症副,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望政基。 院中可真熱鬧贞铣,春花似錦、人聲如沸沮明。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荐健。三九已至酱畅,卻和暖如春琳袄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺酸。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工窖逗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人餐蔬。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓滑负,卻偏偏與公主長得像,于是被迫代替她去往敵國和親用含。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,113評論 1 32
  • 幾點(diǎn)說明:代碼中的 //<== 表示跟上面的相比帮匾,這是新增的啄骇,或者是修改的代碼,不知道怎么樣在代碼塊里面再強(qiáng)調(diào)幾行...
    鄒小創(chuàng)閱讀 14,014評論 15 41
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,010評論 6 13
  • 這幾天被即將的期末考試折磨到?jīng)]脾氣瘟斜「准校考試未至,思維卻已混亂螺句。作為新生虽惭,對未知的大學(xué)考試制度和出題模式實(shí)在惶恐。...
    木兮zz閱讀 93評論 0 0
  • 這里對么
    這沒閱讀 81評論 0 0