2010-08-27 7 views
26

Ich benutze Mockito, um ein altes JAAS/LDAP Login Modul zu testen.Mit Mockito, wie kann ich ein Callback-Objekt auf eine Void-Methode abfangen?

Die javax.security.auth.callback.CallbackHandler-Schnittstelle definiert die Funktion:

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

ich callbacks ich erwarte ein NameCallback enthalten, die das Objekt, das den Test manipuliert werden muss, um.

Gibt es eine Möglichkeit, dies effektiv zu verspotten, oder wäre ich besser mit einer Stub-Implementierung von CallbackHandler?

Antwort

33

Für Funktionen Rückkehr void verwenden doAnswer()

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

Und ein Answer, dass das Abfangen führt als Parameter zu doAnswer gehen müssen sich, z.B. als eine anonyme Klasse:

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

In diesem Fall args wird das Array Callback[] sein!