Tuve un problema con burlar al cliente Apache Http. El siguiente intento para crear un simulacro:¿Por qué mi objeto de simulacro de Mockito usa la implementación real
DefaultHttpClient httpClient = Mockito.mock(DefaultHttpClient.class);
No se puede crear un verdadero simulacro. La fila superior es ejecutado sin excepciones, pero cuando trato de código auxiliar algún comportamiento:
Mockito.when(httpClient.execute(Mockito.<HttpUriRequest>anyObject())).thenReturn(null);
me sale una excepción a un método en el 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)
¿Por qué es la llamada a ejecutar dentro Mockito. cuando se pasa a AbstractHttpClient?
Encontré una solución a este problema específico: utilizar la interfaz HttpClient en lugar de intentar simular la subclase concreta. Esta es una solución mucho mejor en este caso, pero me pregunto en general qué está pasando aquí. ¿Por qué no puedo burlarme de esta clase concreta correctamente con Mockito? ¿Hay algo especial sobre DefaultHttpClient? ¿Hay otros casos en que Mockito no puede burlarse de las clases concretas?
estoy usando Mockito 1.8.5, 4.0.3 Apache httpclient, Apache HTTP núcleo 4.1, JDK 1.6.0 en OSX
¡Eso es todo, gracias! – auramo