使用Mockito,如何拦截void方法上的回调对象?

我正在使用mockito来测试遗留的JAAS / LDAP登录模块。

javax.security.auth.callback.CallbackHandler接口定义了该函数:

 void handle(javax.security.auth.callback.Callback[] callbacks) 

我期待callbacks包含一个NameCallback ,这是需要操作以通过测试的对象。

有没有办法有效地模拟这个,或者我会更好地使用CallbackHandler的存根实现?

对于返回void函数,请使用doAnswer()

 doAnswer(...).when(mockedObject).handle(any(Callback[].class)); 

并且执行拦截的Answer必须作为doAnswer的参数,例如作为匿名类:

 new Answer() { public Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); Mock mock = invocation.getMock(); return null; }} 

在这种情况下, args将是数组Callback[]