在单元测试中使用 HttpClient 后如何正确清理
How to properly clean up after using an HttpClient in a unit test
在使用 Apache HttpClient 触发请求的单元测试中,我看到了以下设置和清理代码:
private HttpClient httpClient;
private HttpRequestBase httpRequest;
@Before
public void setUp() throws Exception {
httpClient = new DefaultHttpClient();
}
@After
public void closeRequests() {
if (httpRequest != null) {
httpRequest.releaseConnection();
httpRequest = null;
}
}
测试比例如发送获取请求并检查响应:
@Test
public void getSomething() throws Exception {
httpGet = new HttpGet("http://some/url");
HttpResponse response = httpclient.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), is(HttpStatus.SC_OK));
}
现在我的问题是:这些测试是否会自行正确清理?据我了解,releaseConnection()
调用仅将连接交还给客户端的连接管理器,但实际上并没有关闭它。
所以测试不应该这样做:
@After
public void closeConnections() {
httpClient.getConnectionManager().shutdown();
}
即使没有在 http 请求实例上调用 releaseConnection(),这是否会正确关闭所有连接?
是的,你应该。关闭连接管理器(或使用 HC 4.3 及更新版本关闭客户端)是集成测试中正确的做法。
在使用 Apache HttpClient 触发请求的单元测试中,我看到了以下设置和清理代码:
private HttpClient httpClient;
private HttpRequestBase httpRequest;
@Before
public void setUp() throws Exception {
httpClient = new DefaultHttpClient();
}
@After
public void closeRequests() {
if (httpRequest != null) {
httpRequest.releaseConnection();
httpRequest = null;
}
}
测试比例如发送获取请求并检查响应:
@Test
public void getSomething() throws Exception {
httpGet = new HttpGet("http://some/url");
HttpResponse response = httpclient.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), is(HttpStatus.SC_OK));
}
现在我的问题是:这些测试是否会自行正确清理?据我了解,releaseConnection()
调用仅将连接交还给客户端的连接管理器,但实际上并没有关闭它。
所以测试不应该这样做:
@After
public void closeConnections() {
httpClient.getConnectionManager().shutdown();
}
即使没有在 http 请求实例上调用 releaseConnection(),这是否会正确关闭所有连接?
是的,你应该。关闭连接管理器(或使用 HC 4.3 及更新版本关闭客户端)是集成测试中正确的做法。