2016-06-27 1 views
1

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 vraiPerformSignInAsynca é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); 
+0

Qu'en est-il de votre gestionnaire, est-ce aussi un simulacre? pouvez-vous fournir un vidage de thread? –

Répondre

0

Le problème avéré être que je référence à une autre instance de authManager dans le bloc de code dans ma question que ce qui était utilisé dans la vraie méthode. En conséquence, le simulacre n'était pas déclenché.