我有一个类:如何在Android中使用内置框架对使用HttpClient的类进行单元测试?
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) {...}
}
我不能找到一种方法,使用一个标准的框架来测试它。特别是,我需要模拟测试中丢失的全部互联网。
在执行测试时,有人建议手动关闭仿真器中的互联网。但在我看来,这不是一个好的解决方案,因为自动测试应该是......自动的。
我在类中添加了一个“client”字段,试图从测试类中嘲笑它。但是HttpClient接口的实现看起来相当复杂。
Robolectric框架允许开发者测试Http connection据我所知。但我想有一些方法可以在不使用这么大的额外框架的情况下编写这样的测试。
那么是否有任何使用HttpClient的单元测试类的简短方法?你在项目中如何解决这个问题?
谢谢你的回答。那么,标题说单元测试使用HttpClient的一些类,我不是说测试非常HttpClient。对不起,如果我没有说清楚。 WiFi管理器的选项非常棒,但手机通过移动网络连接。我试过了飞机模式,它仍然连接。所以,我猜,Robolectric是唯一的选择。谢谢。 – 2012-04-16 02:51:52