Java Как вызвать метод из другого ложного метода

Можно ли вызвать какой-либо метод из другого ложного метода вместо возврата значения с помощью Mockito или PowerMock?

Вот пример, чтобы сделать ясно:

У меня есть запрос в производственном классе:

session.createQuery("update clause")
                    .setParameter("")
                    .executeUpdate();
session.flush();

И в моем тестовом классе я высмеиваю это так:

Query q = mock(Query.class, "q");
when(session.createQuery("update lalala")).thenReturn(q);
when(q.executeUpdate()).thenReturn(something);

Теперь вместо того, чтобы делать thenReturn(something) Мне нужно вызвать метод void, который также находится в моем тестовом классе, который имитирует поведение базы данных.

т.е.

public void doSomething()
{
  // do smth
}

Так что в моем тесте, когда вызывается q.executeUpdate, затем вызывается также doSomething().

Я гуглил любые возможные идеи, но просто не могу понять это.

2 ответа

Решение

Вы можете использовать thenAnswer функция. Смотри документацию

when(q.executeUpdate()).thenAnswer( new Answer<Foo>() {
    @Override
    public Foo answer(InvocationOnMock invocation) throws Throwable {
      callYourOtherMethodHere();
      return something;
    }
} );

Вы можете сделать что-то подобное с EasyMock (возможно, с другими инструментами насмешки).

Query q = createMock(Query.class)
expect(q.createQuery("update lalala")).andDelegateTo(anObjectThatCalls_doSomething);
...
Другие вопросы по тегам