Tengo una clase:¿Cómo probar la unidad de una clase que usa HttpClient en Android utilizando el marco integrado?
public class WebReader implements IWebReader {
HttpClient client;
public WebReader() {
client = new DefaultHttpClient();
}
public WebReader(HttpClient httpClient) {
client = httpClient;
}
/**
* Reads the web resource at the specified path with the params given.
* @param path Path of the resource to be read.
* @param params Parameters needed to be transferred to the server using POST method.
* @param compression If it's needed to use compression. Default is <b>true</b>.
* @return <p>Returns the string got from the server. If there was an error downloading file,
* an empty string is returned, the information about the error is written to the log file.</p>
*/
public String readWebResource(String path, ArrayList<BasicNameValuePair> params, Boolean compression) {
HttpPost httpPost = new HttpPost(path);
String result = "";
if (compression)
httpPost.addHeader("Accept-Encoding", "gzip");
if (params.size() > 0){
try {
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
try {
HttpResponse response = client.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
if (entity.getContentEncoding() != null
&& "gzip".equalsIgnoreCase(entity.getContentEncoding()
.getValue()))
result = uncompressInputStream(content);
else
result = convertStreamToString(content);
} else {
Log.e(MyApp.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private String uncompressInputStream(InputStream inputStream)
throws IOException {...}
private String convertStreamToString(InputStream is) {...}
}
no puedo encontrar una manera de probar que el uso de un marco estándar. Especialmente, necesito simular la pérdida total de Internet desde el interior de la prueba.
Existen sugerencias para desactivar manualmente Internet en el emulador mientras se realiza la prueba. Pero me parece que no es una solución bastante buena, porque las pruebas automáticas deberían ser ... automáticas.
Agregué un campo de "cliente" a la clase tratando de simularlo desde el interior de la clase de prueba. Pero la implementación de la interfaz HttpClient parece bastante compleja.
El marco Robolectric permite a los desarrolladores probar Http connection hasta donde yo sé. Pero creo que hay alguna manera de escribir una prueba de este tipo sin usar un marco adicional tan grande.
¿Existen algunas formas breves y sencillas de probar unidades de clases que usan HttpClient? ¿Cómo resolviste esto en tus proyectos?
Gracias por su respuesta. Bueno, el título dice sobre la unidad de prueba de una clase que utiliza HttpClient, no me refiero a probar el HttpClient. Lo siento, si no lo dejé claro. La opción con el administrador WiFi es excelente, pero el teléfono se sigue conectando a través de la red móvil. He probado un modo de avión, todavía está conectando. Entonces, supongo, Robolectric es la única opción. Gracias. –