是否可以从另一个mock方法调用某个方法,而不是使用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()也被调用。
我在谷歌上搜索任何可能的想法,但似乎都想不出来。
您可以使用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);
...