我正在尝试测试此方法,检查超时设置是否正确。
public HttpClientBuilder getClientBuilderWithTimeouts(final int connT, final int reqT, final int socketT){
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder = requestBuilder.setConnectTimeout(connT);
requestBuilder = requestBuilder.setConnectionRequestTimeout(reqT);
requestBuilder = requestBuilder.setSocketTimeout(socketT);
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
return clientBuilder;
}
但在我的单元测试中getParams()
throws UnsupportedOperationException
。在不使用集成测试的情况下如何解决这个问题?
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.config.RequestConfig;
...
@Test
public void testGetClientBuilderWithTimeouts(){
HttpClientBuilder clBuilder = utils.getClientBuilderWithTimeouts(10, 20, 30);
CloseableHttpClient testclient = clBuilder.build();
System.out.println(testclient.getParams().getParameter("http.socket.timeout"));
System.out.println(testclient.getParams().getParameter("http.connection.timeout"));
// asserts ..
}
您可以尝试添加一个HttpRequestInterceptor
在构建实际客户端之前,从您的 utils 类(您想要测试的)获取客户端之后。
...
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.HttpRequest;
import org.apache.http.HttpException;
...
builder.addInterceptorFirst(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
// Get hold of the client context, which holds the request config
RequestConfig requestConfig = HttpClientContext.adapt(context).getRequestConfig();
assertEquals(10, requestConfig.getConnectTimeout());
assertEquals(20, requestConfig.getConnectionRequestTimeout());
assertEquals(30, requestConfig.getSocketTimeout());
}
});
现在只需调用任何 URL,并忽略客户端在 URL 请求失败时将抛出的异常。由于拦截器是首先添加的并且是请求拦截器,因此应该在尝试请求之前调用它,为您提供要断言的请求配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)