What is the difference between Mockito.mock(SomeClass) and the @Mock annotation?
What is the difference between Mockito.mock(Class<T> classToMock)
method and the @Mock
annotation?
Are they the same?
For Example, is this:
private TestClass test = Mockito.mock(TestClass.class);
the same as:
@Mock
private TestClass test;
Solution 1:
They both achieve the same result. Using an annotation (@Mock
) is usually considered "cleaner", as you don't fill up your code with boilerplate assignments that all look the same.
Note that in order to use the @Mock
annotation, your test class should be annotated with @RunWith(MockitoJUnitRunner.class)
or contain a call to MockitoAnnotations.initMocks(this)
in its @Before
method.
Solution 2:
The difference is in the lines of code you need to write :) :) :)
Seriously though, using the annotations has the exact same effect as using the Mockito.mock.
To quote the documentation of MockitoAnnotations
the use of annotations has the following benefits:
Allows shorthand creation of objects required for testing.
Minimizes repetitive mock creation code.
Makes the test class more readable.
Makes the verification error easier to read because field name is
used to identify the mock.
The javadoc for MockitoAnnotations
is here