java - examples - import static org hamcrest matchers equalto
Mockito''s Matcher vs Hamcrest Matcher? (1)
Los métodos de coincidencia de Hamcrest devuelven Matcher<T>
y Mockito matcher devuelven T. Así que, por ejemplo: org.hamcrest.Matchers.any(Integer.class)
devuelve una instancia de org.hamcrest.Matcher<Integer>
y org.mockito.Matchers.any(Integer.class)
devuelve una instancia de Integer
.
Eso significa que solo puede usar los comparadores de Hamcrest cuando se espera un objeto Matcher<?>
En la firma, normalmente en assertThat
calls. Al configurar expectativas o verificaciones en las que llama a los métodos del objeto simulado, utiliza los emparejadores de Mockito.
Por ejemplo (con nombres completos para mayor claridad):
@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));
}
Si desea utilizar un emparejador Hamcrest en un contexto que requiera un emparejador Mockito, puede usar el org.mockito.Matchers.argThat
org.mockito.Matchers.argThat. Convierte un matcher de Hamcrest en un matcher de Mockito. Por lo tanto, digamos que deseaba hacer coincidir un valor doble con cierta precisión (pero no mucha). En ese caso, podrías hacer:
when(mockFoo.getBarByDouble(argThat(is(closeTo(1.0, 0.001))))).
thenReturn(mockBar);
Eso va a ser fácil, pero no puedo encontrar la diferencia entre ellos y cuál usar, si tengo ambas libs incluidas en mi classpath.