美文网首页
使用Mockito模拟异常

使用Mockito模拟异常

作者: 一路花开_8fab | 来源:发表于2019-04-15 14:42 被阅读0次

接下来我们将以MyDictionary类为例进行介绍

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");
}

相关文章

网友评论

      本文标题:使用Mockito模拟异常

      本文链接:https://www.haomeiwen.com/subject/inyuwqtx.html