A comprehensive Java mocking framework that enables developers to create test doubles for unit testing.
—
Verification in Mockito allows you to check that mock methods were called with expected arguments and frequencies. This is essential for testing interactions between objects.
Verify that a method was called:
public static <T> T verify(T mock);
public static <T> T verify(T mock, VerificationMode mode);Usage Examples:
List<String> mock = mock(List.class);
// Use the mock
mock.add("item");
mock.clear();
// Verify interactions
verify(mock).add("item");
verify(mock).clear();
verify(mock).add(eq("item")); // Using argument matchersControl how many times a method should be called:
public static VerificationMode times(int wantedNumberOfInvocations);
public static VerificationMode never();
public static VerificationMode atLeastOnce();
public static VerificationMode atLeast(int minNumberOfInvocations);
public static VerificationMode atMost(int maxNumberOfInvocations);
public static VerificationMode only();Usage Examples:
List<String> mock = mock(List.class);
// Call method multiple times
mock.add("item1");
mock.add("item2");
mock.add("item3");
// Verify exact number of calls
verify(mock, times(3)).add(anyString());
verify(mock, times(1)).add("item1");
// Verify never called
verify(mock, never()).remove(anyString());
// Verify at least once
verify(mock, atLeastOnce()).add(anyString());
// Verify minimum number of calls
verify(mock, atLeast(2)).add(anyString());
// Verify maximum number of calls
verify(mock, atMost(5)).add(anyString());
// Verify this was the only interaction
verify(mock, only()).add(anyString());public static VerificationMode calls(int wantedNumberOfInvocations);This is an alias for times():
verify(mock, calls(3)).add(anyString());
// Equivalent to: verify(mock, times(3)).add(anyString());Verify that no interactions occurred:
public static void verifyNoMoreInteractions(Object... mocks);
public static void verifyZeroInteractions(Object... mocks);Usage Examples:
List<String> mock1 = mock(List.class);
List<String> mock2 = mock(List.class);
// Use mock1 but not mock2
mock1.add("item");
// Verify no interactions with mock2
verifyZeroInteractions(mock2);
// Verify mock1 had only the expected interaction
verify(mock1).add("item");
verifyNoMoreInteractions(mock1);
// Verify multiple mocks
verifyNoMoreInteractions(mock1, mock2);Verify that interactions happened in a specific order:
public static InOrder inOrder(Object... mocks);
public interface InOrder {
<T> T verify(T mock);
<T> T verify(T mock, VerificationMode mode);
void verifyNoMoreInteractions();
}Usage Examples:
List<String> firstMock = mock(List.class);
List<String> secondMock = mock(List.class);
// Use mocks in specific order
firstMock.add("first");
secondMock.add("second");
firstMock.add("third");
// Verify order
InOrder inOrder = inOrder(firstMock, secondMock);
inOrder.verify(firstMock).add("first");
inOrder.verify(secondMock).add("second");
inOrder.verify(firstMock).add("third");
// Verify no more interactions in order
inOrder.verifyNoMoreInteractions();Verify interactions with timeout for asynchronous testing:
public static VerificationWithTimeout timeout(long millis);
public static VerificationAfterDelay after(int millis);Usage Examples:
// Verify within timeout period
verify(mock, timeout(1000)).add("item");
// Verify with exact timeout
verify(mock, timeout(1000).times(1)).add("item");
// Verify after delay
verify(mock, after(100)).add("item");
// Combined with other modes
verify(mock, timeout(1000).atLeast(2)).add(anyString());Verify only interactions, not stubs:
public static Object[] ignoreStubs(Object... mocks);Usage Examples:
List<String> mock = mock(List.class);
// Stub method
when(mock.get(0)).thenReturn("item");
// Use mock
mock.get(0); // This is stubbing interaction
mock.add("new item"); // This is real interaction
// Verify only real interactions, ignore stubs
verify(mock).add("new item");
verifyNoMoreInteractions(ignoreStubs(mock));Verify method calls with specific argument values:
List<String> mock = mock(List.class);
mock.add("exact string");
mock.add("another string");
// Verify exact arguments
verify(mock).add("exact string");
// Verify with argument matchers
verify(mock, times(2)).add(anyString());
verify(mock).add(startsWith("exact"));
verify(mock).add(contains("string"));
// Verify with custom matchers
verify(mock).add(argThat(s -> s.length() > 5));// Good - verify important interactions
verify(emailService).sendEmail(user.getEmail(), "Welcome!");
// Avoid - over-verification of internal details
verify(mock, times(1)).toString(); // Usually not important// Good - verify expected behavior
verify(service, times(1)).processPayment(payment);
// Good - verify it never happens in error cases
verify(emailService, never()).sendEmail(anyString(), anyString());
// Avoid - over-specific verification
verify(service, times(1)).log(anyString()); // Logging is often implementation detailArgumentCaptor<String> emailCaptor = ArgumentCaptor.forClass(String.class);
verify(emailService).sendEmail(emailCaptor.capture(), anyString());
assertEquals("user@example.com", emailCaptor.getValue());// Good - verify order when it matters
InOrder inOrder = inOrder(database, cache);
inOrder.verify(database).save(entity);
inOrder.verify(cache).invalidate(entity.getId());
// Avoid - unnecessary order verification
InOrder inOrder = inOrder(service1, service2);
inOrder.verify(service1).method1(); // If order doesn't matter for correctness
inOrder.verify(service2).method2();List<String> mock = mock(List.class);
verify(mock).add("item"); // Throws WantedButNotInvoked - method never calledList<String> mock = mock(List.class);
mock.add("item");
mock.add("item");
verify(mock, times(1)).add("item"); // Throws TooManyActualInvocationsList<String> mock = mock(List.class);
mock.add("actual");
verify(mock).add("expected"); // Throws ArgumentsAreDifferentList<String> mock = mock(List.class);
mock.clear();
verify(mock, never()).clear(); // Throws NeverWantedButInvokedverify(service).process(argThat(request ->
request.getId() > 0 && request.getName() != null));for (int i = 0; i < 3; i++) {
verify(mock).process(eq(i));
}if (condition) {
verify(service).performAction();
} else {
verify(service, never()).performAction();
}Install with Tessl CLI
npx tessl i tessl/maven-org-mockito--mockito-all