mockito-exceptions
Mocking Exception Throwing using Mockito
1. Overview
In this quick tutorial – we’ll focus on how to configure a method call to throw an exception with Mockito.
For more information on the library, also check out our Mockito series.
Here’s a simple dictionary class we’ll use in these examples:
class MyDictionary {
private Map<String, String> wordMap = new HashMap<>();
public void add(String word, String meaning) {
wordMap.put(word, meaning);
}
public String getMeaning(String word) {
return wordMap.get(word);
}
}
2. Non-Void Return Type
@Test(expected = NullPointerException.class)
public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
MyDictionary dictMock = mock(MyDictionary.class);
when(dictMock.getMeaning(anyString()))
.thenThrow(NullPointerException.class);
dictMock.getMeaning("word");
}
Notice, we configured the getMeaning() method – which returns a value of type String – to throw a NullPointerException when called.
3. Void Return Type
@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");
}
Here, we configured an add() method – which returns void – to throw IllegalStateException when called.
We can’t use when().thenThrow() with void return type as the compiler doesn’t allow void methods inside brackets.
4. Exception as an Object
About configuring the exception itself, we can pass the exception’s class as in our previous examples or as an object:
@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");
}
And we can do the same with doThrow() as well:
@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");
}
5. Spy
@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");
}
6. Conclusion
As always, the full source code can be found over on GitHub.