1. Overview
This cookbook shows how to use Mockito to configure behavior in a variety of examples and use-cases.
The format of the cookbook is example focused and practical – no extraneous details and explanations necessary.
And of course, if you want to learn more about testing well with Mockito, have a look at the other Mockito articles here.
Further reading:
Mockito – Using Spies
Mockito's Mock Methods
We're going to be mocking a simple list implementation – the same implementation we used in the previous cookbook:
public class MyList extends AbstractList<String> {
@Override
public String get(final int index) {
return null;
}
@Override
public int size() {
return 1;
}
}
2. Cookbook
configure simple return behavior for mock
MyList listMock = Mockito.mock(MyList.class);
when(listMock.add(anyString())).thenReturn(false);
boolean added = listMock.add(randomAlphabetic(6));
assertThat(added, is(false));
configure return behavior for mock in an alternative way
MyList listMock = Mockito.mock(MyList.class);
doReturn(false).when(listMock).add(anyString());
boolean added = listMock.add(randomAlphabetic(6));
assertThat(added, is(false));
configure mock to throw an exception on a method call
@Test(expected = IllegalStateException.class)
public void givenMethodIsConfiguredToThrowException_whenCallingMethod_thenExceptionIsThrown() {
MyList listMock = Mockito.mock(MyList.class);
when(listMock.add(anyString())).thenThrow(IllegalStateException.class);
listMock.add(randomAlphabetic(6));
}
configure the behavior of a method with void return type – to throw an exception
MyList listMock = Mockito.mock(MyList.class);
doThrow(NullPointerException.class).when(listMock).clear();
listMock.clear();
configure the behavior of multiple calls
MyList listMock = Mockito.mock(MyList.class);
when(listMock.add(anyString()))
.thenReturn(false)
.thenThrow(IllegalStateException.class);
listMock.add(randomAlphabetic(6));
listMock.add(randomAlphabetic(6)); // will throw the exception
configure the behavior of a spy
MyList instance = new MyList();
MyList spy = Mockito.spy(instance);
doThrow(NullPointerException.class).when(spy).size();
spy.size(); // will throw the exception
configure method to call the real, underlying method on a mock
MyList listMock = Mockito.mock(MyList.class);
when(listMock.size()).thenCallRealMethod();
assertThat(listMock.size(), equalTo(1));
configure mock method call with custom Answer
MyList listMock = Mockito.mock(MyList.class);
doAnswer(invocation -> "Always the same").when(listMock).get(anyInt());
String element = listMock.get(1);
assertThat(element, is(equalTo("Always the same")));
3. Conclusion
This format is an experiment – I'm publishing some of my internal development cookbooks on a given topic – on Google Guava, Hamcrest and now Mockito. The goal is to have this information readily available online – and to add to it whenever I run into a new useful example.
The implementation of all these examples and code snippets can be found over on GitHub – this is a Maven-based project, so it should be easy to import and run as it is.