Ho riscontrato un problema con il client di Apache Http. Il seguente tentativo di creare un mock:Perché il mio oggetto fittizio Mockito utilizza realmente l'implementazione
DefaultHttpClient httpClient = Mockito.mock(DefaultHttpClient.class);
non riesce a creare un vero e finto. La riga sopra viene eseguito senza eccezioni, ma quando provo a stub alcuni comportamenti:
Mockito.when(httpClient.execute(Mockito.<HttpUriRequest>anyObject())).thenReturn(null);
ottengo un'eccezione da un metodo in AbstractHttpClient:
Exception in thread "main" java.lang.IllegalArgumentException: Request must not be null.
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:572)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
Perché la chiamata per eseguire all'interno Mockito. passato a AbstractHttpClient?
Ho trovato una soluzione a questo problema specifico: utilizzare l'interfaccia HttpClient invece di provare a prendere in giro la sottoclasse concreta. Questa è una soluzione molto migliore in questo caso, ma mi chiedo in generale che cosa sta succedendo qui? Perché non posso prendere in giro questa classe concreta in modo appropriato con Mockito? C'è qualcosa di speciale su DefaultHttpClient? Ci sono altri casi in cui Mockito non può prendere in giro lezioni concrete?
sto usando Mockito 1.8.5, Apache HttpClient 4.0.3, Apache nucleo http 4.1, JDK 1.6.0 su OSX
Ecco, grazie! – auramo