使用模拟方法参数来模拟后续步骤

时间:2014-05-04 12:46:31

标签: java unit-testing asynchronous mocking mockito

我的代码中有一个看起来像这样的方法:

action.onResult(new Handler<MyClass>() {
        @Override
        public MyClass handle() { // Do something here }
     }
}

我希望能够嘲笑它(使用Mockito)。像这样:

when(mockedAction.onResult(any(Handler.class))).thenReturn(firstArg.handle());

意思是,我想调用发送给方法handle的参数的onResult方法。我无法模拟处理程序,因为它使用了调用类的内部方法(我考虑使用私有类但是没有达到足够好的解决方案)

动机:这是在同步区域中使用的异步回调机制。我想模拟对处理程序本身的调用,以便在代码中同步地继续流程。

1 个答案:

答案 0 :(得分:1)

好的,UNTESTED但是在这种情况下可以使用ArgumentCaptor

final ArgumentCaptor<Handler> captor = ArgumentCaptor.forClass(Handler.class);

when(mock.onResult(captor.capture())).thenReturn(captor.getValue().handle());

不确定捕获者是否有&#34;时间&#34;在这里初始化。