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 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 0;
    }
}

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 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);
verifyZeroInteractions(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();
verifyNoMoreInteractions(mockedList);

Verify 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 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> argumentCaptor = ArgumentCaptor.forClass(List.class);
verify(mockedList).addAll(argumentCaptor.capture());
List<String> capturedArgument = argumentCaptor.<List<String>> getValue();
assertThat(capturedArgument, hasItem("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 over on GitHub. This is a Maven-based project, so it should be easy to import and run as it is.

Generic bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> CHECK OUT THE COURSE
Comments are closed on this article!