2015-03-06 13 views
5

ho incontrato un problema strano con l'unità di testare la seguente chiamata cliente Maglia:Maglia/Mockito: NullInsteadOfMockException sulla verifica chiamata client.post

PostBody è un MultivaluedMap.

prova

L'unità verifica bene le accept e type chiamate, ma non riesce sul post quello con questa eccezione:

org.mockito.exceptions.misusing.NullInsteadOfMockException: 
Argument passed to verify() should be a mock but is null! 

Ecco il codice di prova:

_client = Mockito.mock(Client.class); 
     _webResource = Mockito.mock(WebResource.class); 
     _builder = Mockito.mock(WebResource.Builder.class); 
     _response = Mockito.mock(ClientResponse.class); 

     Mockito.when(_client.resource(Mockito.anyString())).thenReturn(_webResource); 

     Mockito.when(_response.getEntity(Mockito.any(Class.class))).thenReturn(new RefreshTokenDto()); 
     Mockito.when(_response.getStatus()).thenReturn(200); 

     Mockito.when(_builder.post(Mockito.eq(ClientResponse.class), Mockito.anyObject())).thenReturn(_response); 
     Mockito.when(_builder.type(Mockito.anyString())).thenReturn(_builder); 
     Mockito.when(_webResource.accept(Mockito.anyString())).thenReturn(_builder); 

     RefreshTokenDto response = _clientWrapper.exchangeAuthorizationCodeForToken(_token); 

     Assert.assertNotNull(response); 

     Mockito.verify(_client.resource(_baseUrl + "token")); 
     Mockito.verify(_webResource.accept("application/json")); 
     Mockito.verify(_builder.type("application/x-www-form-urlencoded")); 

     // TODO: this line throws NullRefExc for some unknown reason 
     Mockito.verify(_builder.post(Mockito.any(Class.class), Mockito.any(MultivaluedMap.class))); 

Riesci a vedere qualcosa di sbagliato in questo codice?

risposta

9

Sì. Hai utilizzato in modo improprio verify. L'argomento su verify deve essere la simulazione stessa. Quindi si chiama il metodo che si desidera verificare sul valore restituito da verify. Quindi, in questo caso, il primo verify chiamata dovrebbe essere

Mockito.verify(_client).resource(_baseUrl + "token"); 

e allo stesso modo per le altre verify chiamate.

+0

Ehi - questo risolve davvero il problema! Ho confuso la sintassi per 'when' e' verify'. Ho guardato questo codice da ieri e non sono riuscito a capire cosa c'era che non andava. Probabilmente mostra che sono nuovo di Mockito. Grazie per l'aiuto! –

+0

Nessun problema. Buona fortuna per il tuo apprendimento continuo, Joanna. –