That's going to be an easy one, but I cannot find the difference between them and which one to use, if I have both the lib's included in my classpath?
Requires hamcrest on classpath, Mockito does not depend on hamcrest!
Hamcrest is a framework that assists writing software tests in the Java programming language. It supports creating customized assertion matchers ('Hamcrest' is an anagram of 'matchers'), allowing match rules to be defined declaratively. These matchers have uses in unit testing frameworks such as JUnit and jMock.
mockito. Matchers is deprecated, ArgumentMatchers should be used instead.
Hamcrest matcher methods return Matcher<T>
and Mockito matchers return T. So, for example: org.hamcrest.Matchers.any(Integer.class)
returns an instance of org.hamcrest.Matcher<Integer>
, and org.mockito.Matchers.any(Integer.class)
returns an instance of Integer
.
That means that you can only use Hamcrest matchers when a Matcher<?>
object is expected in the signature - typically, in assertThat
calls. When setting up expectations or verifications where you are calling methods of the mock object, you use the Mockito matchers.
For example (with fully qualified names for clarity):
@Test public void testGetDelegatedBarByIndex() { Foo mockFoo = mock(Foo.class); // inject our mock objectUnderTest.setFoo(mockFoo); Bar mockBar = mock(Bar.class); when(mockFoo.getBarByIndex(org.mockito.Matchers.any(Integer.class))). thenReturn(mockBar); Bar actualBar = objectUnderTest.getDelegatedBarByIndex(1); assertThat(actualBar, org.hamcrest.Matchers.any(Bar.class)); verify(mockFoo).getBarByIndex(org.mockito.Matchers.any(Integer.class)); }
If you want to use a Hamcrest matcher in a context that requires a Mockito matcher, you can use the org.mockito.Matchers.argThat
(or org.mockito.hamcrest.MockitoHamcrest.argThat
in Mockito 2). It converts a Hamcrest matcher into a Mockito matcher. So, say you wanted to match a double value with some precision (but not much). In that case, you could do:
when(mockFoo.getBarByDouble(argThat(is(closeTo(1.0, 0.001))))). thenReturn(mockBar);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With