Mockito Verify Cookbook
Last updated: August 23, 2023
1. Overview
This cookbook illustrates how to use Mockito verify in a variety of use cases.
The format of the cookbook is example-focused and practical — no extraneous details and explanations are necessary.
We’re going to be mocking a simple list implementation:
public class MyList extends AbstractList<String> {
@Override
public String get(final int index) {
return null;
}
@Override
public int size() {
return 1;
}
}
Further reading:
Mocking Exception Throwing using Mockito
Learn to configure a method call to throw an exception in Mockito.
Mockito's Java 8 Features
Overview of Java 8 support in Mockito framework, including Streams and default interface methods
Mocking of Private Methods Using PowerMock
Learn how PowerMock can be used to extend the capability of Mockito for mocking and verification of private methods in the class under test.
2. The Cookbook
Verify simple invocation on mock:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList).size();
Verify the number of interactions with mock:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, times(1)).size();
Verify no interaction with the whole mock occurred:
List<String> mockedList = mock(MyList.class);
verifyNoInteractions(mockedList);
Verify no interaction with a specific method occurred:
List<String> mockedList = mock(MyList.class);
verify(mockedList, times(0)).size();
Verify there are no unexpected interactions — this should fail:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.clear();
verify(mockedList).size();
assertThrows(NoInteractionsWanted.class, () -> verifyNoMoreInteractions(mockedList));
Verify the order of interactions:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();
Verify an interaction has not occurred:
List<String> mockedList = mock(MyList.class);
mockedList.size();
verify(mockedList, never()).clear();
Verify an interaction has occurred at least a certain number of times:
List<String> mockedList = mock(MyList.class);
mockedList.clear();
mockedList.clear();
mockedList.clear();
verify(mockedList, atLeast(1)).clear();
verify(mockedList, atMost(10)).clear();
Verify interaction with the exact argument:
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add("test");
Verify interaction with flexible/any argument:
List<String> mockedList = mock(MyList.class);
mockedList.add("test");
verify(mockedList).add(anyString());
Verify interaction using argument capture:
List<String> mockedList = mock(MyList.class);
mockedList.addAll(Lists.<String> newArrayList("someElement"));
ArgumentCaptor<List<String>> argumentCaptor = ArgumentCaptor.forClass(List.class);
verify(mockedList).addAll(argumentCaptor.capture());
List<String> capturedArgument = argumentCaptor.getValue();
assertThat(capturedArgument).contains("someElement");
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.
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.