J'essaie de se moquer de ma classe AuthenticationManager
. Je le fais comme ci-dessous:L'application se bloque sur l'appel de méthode simulée
AuthenticationManager authManager = Mockito.mock(AuthenticationManager.class);
Je veux seulement se moquer de l'une de ses méthodes, PerformSignInAsync
. Cette méthode renvoie void
. L'un des arguments transmis à cette méthode est un gestionnaire et son événement onComplete
doit être appelé. Je suis en train de le faire avec un ArgumentCaptor
comme ci-dessous:
ArgumentCaptor<AuthenticationResponseHandler> authResponseCaptor = ArgumentCaptor.forClass(AuthenticationResponseHandler.class);
Voici comment je l'ai approché se moquant de la méthode que je veux moqué. Lorsque le test atteint la vraie méthode, j'ai fait le pas avec le débogueur et il est invoqué par Mockito. Donc, je pense que le problème doit être avec mon déclenchement de l'appel onComplete
. L'application se bloque sans exception levée une fois que le vraiPerformSignInAsync
a été appelé.
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
AuthenticationResponseHandler handler = (AuthenticationResponseHandler) args[4];
// The line below is what I want triggered
handler.onComplete(AuthenticationOperation.SignIn, responseToReturn);
return null;
}
}).when(authManager).PerformSignInAsync(
anyString(),
anyString(),
anyBoolean(),
Matchers.any(UserLOBSystemType.class),
authResponseCaptor.capture(),
anyString(),
anyString());
J'ai aussi essayé le déclenchement onComplete
avec le code ci-dessous, en vain:
authResponseCaptor.capture().onComplete(AuthenticationOperation.SignIn, responseToReturn);
Qu'en est-il de votre gestionnaire, est-ce aussi un simulacre? pouvez-vous fournir un vidage de thread? –