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.