Java如何从另一个mock方法调用方法



是否可以从另一个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);
...

相关内容

  • 没有找到相关文章

最新更新