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 are necessary.
And of course, if you want to learn more about testing well with Mockito, have a look at the other Mockito articles here.
We’re going to be mocking a simple list implementation, which is 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. The Cookbook
Configure simple return behavior for mock:
MyList listMock = mock(MyList.class);
when(listMock.add(anyString())).thenReturn(false);
boolean added = listMock.add(randomAlphabetic(6));
assertThat(added).isFalse();
Configure return behavior for mock in an alternative way:
MyList listMock = mock(MyList.class);
doReturn(false).when(listMock).add(anyString());
boolean added = listMock.add(randomAlphabetic(6));
assertThat(added).isFalse();
Configure mock to throw an exception on a method call:
MyList listMock = mock(MyList.class);
when(listMock.add(anyString())).thenThrow(IllegalStateException.class);
assertThrows(IllegalStateException.class, () -> listMock.add(randomAlphabetic(6)));
**Configure the behavior of a method with void return type — to throw an exception:
**
MyList listMock = mock(MyList.class);
doThrow(NullPointerException.class).when(listMock).clear();
assertThrows(NullPointerException.class, () -> listMock.clear());
Configure the behavior of multiple calls:
MyList listMock = mock(MyList.class);
when(listMock.add(anyString()))
.thenReturn(false)
.thenThrow(IllegalStateException.class);
assertThrows(IllegalStateException.class, () -> {
listMock.add(randomAlphabetic(6));
listMock.add(randomAlphabetic(6));
});
Configure the behavior of a spy:
MyList instance = new MyList();
MyList spy = spy(instance);
doThrow(NullPointerException.class).when(spy).size();
assertThrows(NullPointerException.class, () -> spy.size());
Configure method to call the real, underlying method on a mock:
MyList listMock = mock(MyList.class);
when(listMock.size()).thenCallRealMethod();
assertThat(listMock).hasSize(1);
Configure mock method call with custom Answer:
MyList listMock = mock(MyList.class);
doAnswer(invocation -> "Always the same").when(listMock).get(anyInt());
String element = listMock.get(1);
assertThat(element).isEqualTo("Always the same");
3. Conclusion
The goal of this guide is to have this information readily available online. I’ve published a few similar development cookbooks on Google Guava and Hamcrest and now Mockito.
The implementation of all these examples and code snippets can be found on GitHub. This is a Maven-based project, so it should be easy to import and run as it is.