2016-11-16 7 views
0

私はJavaで単体テストケースを作成するのが初めてで、httpクライアント用にテストケースをどうやって模倣すべきかを考えようとしています。 、私はちょうど私が、サーバから取得することができ、すべての応答を模擬しようとする場合、実際にURLを呼び出して、サーバーをヒットしたくないjava httpクライアントビルダー用モックテストクラスの作成

public HttpResponse getRequest(String uri) throws Exception { 
     String url = baseUrl + uri; 

     CloseableHttpClient httpClient = HttpClientBuilder.create().build(); 
     HttpGet get = new HttpGet(url); 
     get.setHeader(AUTHORIZATION_HEADER, authorization); 
     get.setHeader(ACCEPT_HEADER, APPLICATION_JSON); 
     HttpResponse response = httpClient.execute(get); 
     return response; 
    } 

など:私は、次の機能をテストしようとしています500または200またはソケットエラー。私はJava関数をモックするためにMockitoライブラリを調べましたが、私はMockito cantを静的メソッドに使用することを読んでいます。

私はこのために単体テストを書くべきですか?また、httpClientが関数内で作成されているので、これはテストのための良い習慣ですか?

+2

あなたは[ここにあなたの前の1](http://stackoverflow.com/qあなたの質問が異なっているかについて詳しく説明していただけます/ 40496322/1426891)? –

答えて

0

この場合、HttpClientを推奨しないメソッド内で作成しているので、HttpClientをモックすることはできません。代わりに、この場合はHttClientに依存関係を注入する必要があります。以下は

コードです:

public class Test1 { 
    private HttpClient httpClient ; 
    Test1(HttpClient httpClient){ 
     this.httpClient = httpClient; 
    } 

    public HttpResponse getRequest(String uri) throws Exception { 
     HttpGet get = new HttpGet(uri); 
     HttpResponse response = httpClient.execute(get); 
     return response; 
    } 
} 

テストクラス

public class Test1Test { 

    @Test 
    public void testGetRequest() throws Exception { 
     final HttpClient mockHttpClient = Mockito.mock(HttpClient.class); 
     final Test1 test1 = new Test1(mockHttpClient); 
     final HttpResponse mockHttpResponse = Mockito.mock(HttpResponse.class); 
     final StatusLine mockStatusLine = Mockito.mock(StatusLine.class); 
     Mockito.when(mockHttpClient.execute(ArgumentMatchers.any(HttpGet.class))).thenReturn(mockHttpResponse); 
     Mockito.when(mockHttpResponse.getStatusLine()).thenReturn(mockStatusLine); 
     Mockito.when(mockStatusLine.getStatusCode()).thenReturn(200); 
     final HttpResponse response = test1.getRequest("https://url"); 
     assertEquals(response.getStatusLine().getStatusCode(), 200); 
    } 
} 
関連する問題