Переписать JMockit Mockup в Mockito: перехват вызовов методов API зависимостей
Я пытаюсь переписать code JMockit (новый Mockup) в Mockito. В моем тесте JUnit вызывается метод (initializeEntityManagerInterception), в котором определены методы перехвата. Эти методы должны перехватывать методы неявно указанного объекта EntityManagerImpl, который является частью API зависимостей. В моем тесте JMockit мой метод setId вызывается правильно в перехвате, но не в моем переписанном codeе Mockito. Итак, вопрос: может ли Mockito перехватывать методы неявных объектов зависимости, как это делает JMockit?
Я попробовал следующий code mockito, но во время отладки метод setId так и не вызывается:
Переписать макет JMockit в Mockito: перехват вызовов методов API зависимости, я ожидал похожего поведения Mockito, как и JMockit
protected void initializeEntityManagerInterception() throws Exception {
new MockUp<EntityManagerImpl>() {
@Mock
public void persist(Invocation i, Object o) {
setId(o); // my own written method
i.proceed(o);
}
@Mock
public Object merge(Invocation i, Object o) {
setId(o);
return i.proceed(o);
}
};
}
protected void initializeEntityManagerInterception() throws Exception {
EntityManagerImpl entityManagerImpl = mock(EntityManagerImpl.class);
Answer<Void> persist = new Answer<Void>() {
public Void answer(final InvocationOnMock invocation) throws Throwable {
Object[] arguments = invocation.getArguments();
Object obj = arguments[0];
setId(obj);
invocation.callRealMethod();
return null;
}
};
doAnswer(persist).when(entityManagerImpl).persist(any(Object.class));
Answer<Object> merge = new Answer<Object>() {
public Object answer(final InvocationOnMock invocation) throws Throwable {
Object[] arguments = invocation.getArguments();
Object obj = arguments[0];
setId(obj);
return invocation.callRealMethod();
}
};
doAnswer(merge).when(entityManagerImpl).merge(any(Object.class));
}