Я использую @InjectMocks для тестируемого класса и @Mock для автоматического создания и введения макетов. Это прекрасно работает для меня.
Примерно так:
@RunWith(MockitoJUnitRunner.class)
public final class ClassTest{
@InjectMocks
private ClassUnderTest objectOfClass;
@Mock
private ObjectMapper objectMapper = new ObjectMapper();
@Test (expected = JsonProcessingException.class)
public void testMethod() {
when(objectMapper.writeValueAsString(anyObject()))
.thenThrow(JsonProcessingException.class);
}
}
InvalidUseOfMatchersException может возникнуть, если вы не используете сопоставления для всех аргументов в вызове функции в тесте.
Как:
when(mock.doSomething(any(), someMock)).thenReturn(something); // This can generate the exception.
Вместо этого вы можете использовать:
when(mock.doSomething(any(),eq(someMock))).thenReturn(something); // Here we use eq matcher instead of simply passing the mock