How I use mockito
Mockito is a popular mocking framework for Java, and mockito.verify
is a utility method used for verifying interactions between a mock object and the code under test. It allows you to assert that specific methods of a mock object were called (or not called) with certain arguments and in the expected order.
Here are some popular examples of using mockito.verify
:
verify
Verify if a method was called
// ArrangeList<String> mockedList = mock(List.class);
// ActmockedList.add("Hello");
// Assertverify(mockedList).add("Hello");
In this example, we create a mock object mockedList
of the List
interface. After calling the add
method on the mock, we use verify(mockedList).add("Hello")
to assert that the add
method was called with the argument "Hello"
.
Verify if a method was called a specific number of times
// ArrangeMyClass myClass = mock(MyClass.class);
// ActmyClass.doSomething();myClass.doSomething();
// Assertverify(myClass, times(2)).doSomething();
In this example, we use verify(myClass, times(2)).doSomething()
to assert that the doSomething
method of the myClass
mock object was called exactly two times.
Verify if a method was never called
// ArrangeMyClass myClass = mock(MyClass.class);
// Act// No method call
// Assertverify(myClass, never()).doSomething();
Here, we use verify(myClass, never()).doSomething()
to assert that the doSomething
method of the myClass
mock object was never called.
Verify the order of method calls
// ArrangeMyClass myClass = mock(MyClass.class);
// ActmyClass.doSomething();myClass.doSomethingElse();
// AssertInOrder inOrder = inOrder(myClass);inOrder.verify(myClass).doSomething();inOrder.verify(myClass).doSomethingElse();
In this example, we use the inOrder
feature of Mockito to verify that the doSomething
method was called before the doSomethingElse
method on the myClass
mock object.
Verify interactions with arguments
// ArrangeMyClass myClass = mock(MyClass.class);
// ActmyClass.processData("hello", 42);
// Assertverify(myClass).processData(eq("hello"), anyInt());
Here, we use verify(myClass).processData(eq("hello"), anyInt())
to assert that the processData
method was called with the argument "hello"
as the first parameter and any integer value as the second parameter. The eq
and anyInt
are argument matchers provided by Mockito.
BDD Mocktito
given
is a method provided by the BDDMockito
library, which is an extension. BDDMockito
introduces a more human-readable and behavior-driven development (BDD) style syntax for setting up mock objects and expectations.
The given
method is used to define the behavior or expectations of a mock object. It is typically used in the "Arrange" step of the Arrange-Act-Assert (AAA) pattern, where you set up the preconditions for your test case.
Here's an example of how given
is used:
import static org.mockito.BDDMockito.given;
public class SomeServiceTest { @Test public void testMethod() { // Arrange SomeRepository repository = mock(SomeRepository.class); SomeEntity entity = new SomeEntity("test"); given(repository.findById(1L)).willReturn(entity);
SomeService service = new SomeService(repository);
// Act SomeEntity result = service.getEntityById(1L);
// Assert assertEquals(entity, result); }}
The BDD-style syntax provided by given
makes the test code more readable and expressive, especially when dealing with complex mock setups or interactions. It helps describe the behavior and expectations of the system under test in a more natural and human-friendly way, aligning with the principles of Behavior-Driven Development (BDD).
BDDMockito also provides other methods like willReturn
, willThrow
, then
, and should
to define more complex mock behaviors and assertions, further enhancing the readability and expressiveness of your tests.