Переписать JMockit Mockup на Mockito: перехват вызовов методов зависимостей API

1
7

Переписать 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));
}
Прохор
Вопрос задан7 мая 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.