2017-02-09 27 views
1

このメソッドをテストして、タイムアウトが正しく設定されていることを確認しようとしています。私のユニットテストでApache HttpClientのユニットテストのタイムアウト

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

答えて

1

あなたは(あなたがテストしたい)あなたのutilsのクラスからクライアントを取得した後、実際のクライアントを構築する前HttpRequestInterceptorを追加しようとすることができます。

... 

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へのリクエストが失敗した場合にクライアントがスローしようとしている例外を無視して、無視します。インターセプターは最初に追加され、要求インターセプターであるため、要求を試みる前に呼び出され、要求configがアサートされます。

+0

ありがとう、やってみよう! –

+1

ビルダーが設定されたプロパティの値を公開するように、apache-httpclientにプルリクエストをオープンすることがあります。 –

関連する問題