2016-11-16 2 views
0

Я новичок в написании модульных тестовых примеров на Java, и я пытаюсь выяснить, как мне высмеивать свои тестовые примеры для моего http-клиента. Я пытаюсь проверить следующую функцию:Написание Mock тестового класса для java http clientbuilder

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

Я не хочу, чтобы на самом деле назвать URL и нажмите на сервер, я просто хочу, чтобы попытаться имитировали все ответы, которые я могу получить от сервера, такие как 500 или 200 или ошибки сокета. Я изучил библиотеку Mockito, чтобы высмеять java-функции, но я прочитал, что Mockito не может использоваться для статических методов.

Может ли кто-нибудь направить меня на то, как я должен написать единичный тест для этого? Кроме того, поскольку httpClient создается внутри функции, это хорошая практика для тестирования?

+2

Можете ли вы уточнить, как ваш вопрос отличается от [ваш предыдущий здесь] (http://stackoverflow.com/q/40496322/1426891)? –

ответ

0

Вы не можете высмеивать 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); 
    } 
} 
Смежные вопросы