每次调用mock上的方法时,如何让Mockito做某事?

时间:2013-08-14 17:45:53

标签: testing methods mockito

我正试图用Mockito实现这种行为:

当类型O的对象应用于方法M时,mock应该对类型为O的对象执行另一个方法,将其自身作为参数传递。

毕竟有可能吗?

1 个答案:

答案 0 :(得分:6)

您可以使用doAnswerwhen结合Mockito.any的某种组合。 doAnswerPowerMockito的一部分,有助于扩展您可能想要做的很多嘲弄。

注意,doAnswer用作void函数的示例。对于非空格,您可以使用标准Mockito.when(MOCK.call).then(RESULT)

PowerMockito.doAnswer(new org.mockito.stubbing.Answer<Object>() {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        //Do whatever to Object O here.
        return null;
    }).when(MOCKOBJECT.methodCall(Mockito.any(O.class)));

然后在模拟对象上执行有用的doAnswer功能,使用when可以将其分配给任何特定类别的对象(而不是必须指定一个确切的对象)期待)。使用Mockito.any(Class.class))作为参数的一部分,让Mockito知道当你使用传入的指定类型的任何对象进行方法调用时,触发你的doWhatever。