Java Apache HttpClient中的单元测试超时

Java Apache HttpClient中的单元测试超时,java,testing,apache-httpclient-4.x,Java,Testing,Apache Httpclient 4.x,我正在尝试测试这个方法,检查超时设置是否正确 public HttpClientBuilder getClientBuilderWithTimeouts(final int connT, final int reqT, final int socketT){ RequestConfig.Builder requestBuilder = RequestConfig.custom(); requestBuilder = requestBuilder.setConnectTimeout

我正在尝试测试这个方法,检查超时设置是否正确

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()
抛出
不支持操作异常
。我如何在不使用集成测试的情况下解决这个问题

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 ..
}

在从您的utils类(您要测试的类)获取客户机之后,您可以尝试在构建实际客户机之前添加一个
HttpRequestInterceptor


现在,只需调用任意URL,忽略客户端将抛出的异常,以防对URL的请求失败。由于拦截器是作为第一个拦截器添加的,并且是一个请求拦截器,因此应该在尝试请求之前调用它,为您提供要断言的请求配置。

可能会向apache httpclient打开一个请求,让构建器公开配置属性的值;)这可能是唯一有效的方法,但在工作代码中而不是在测试中添加
assertEquals
看起来……很难看,抱歉。我可能会走这条路,但哦,我希望他们把那部分暴露出来。
...

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());
      }
    });