2017-02-09 3 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

당신은 (테스트 할) 당신의 유틸 클래스에서 클라이언트를받은 후, 실제 클라이언트를 구축하기 전에 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에 전화를하고 클라이언트가 URL이 실패에 경우 요청을 던질 것입니다 예외를 무시합니다. 인터셉터는 첫 번째로 추가되고 요청 인터셉터이기 때문에 요청을 시도하기 전에 호출해야합니다. 그러면 요청을 어설 션하도록 설정할 수 있습니다.

+0

감사합니다. 시도해 보겠습니다. –

+1

아마도 빌더가 구성된 등록 정보의 값을 공개하도록 풀 요청을 apache-httpclient에 열어야합니다. –

관련 문제