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);
...