2016-12-30 9 views
1

У меня есть следующий код, который я хочу проверить с помощью Junit и Mockito.Отказывание запросов HttpClient с mockito

код для проверки:

Header header = new BasicHeader(HttpHeaders.AUTHORIZATION,AUTH_PREAMBLE + token); 
    List<Header> headers = new ArrayList<Header>(); 
    headers.add(header); 
    HttpClient client = HttpClients.custom().setDefaultHeaders(headers).build(); 
    HttpGet get = new HttpGet("real REST API here")); 
    HttpResponse response = client.execute(get); 
    String json_string_response = EntityUtils.toString(response.getEntity()); 

И тест

protected static HttpClient mockHttpClient; 
protected static HttpGet mockHttpGet; 
protected static HttpResponse mockHttpResponse; 
protected static StatusLine mockStatusLine; 
protected static HttpEntity mockHttpEntity; 





@BeforeClass 
public static void setup() throws ClientProtocolException, IOException { 
    mockHttpGet = Mockito.mock(HttpGet.class); 
    mockHttpClient = Mockito.mock(HttpClient.class); 
    mockHttpResponse = Mockito.mock(HttpResponse.class); 
    mockStatusLine = Mockito.mock(StatusLine.class); 
    mockHttpEntity = Mockito.mock(HttpEntity.class); 

    Mockito.when(mockHttpClient.execute(Mockito.isA(HttpGet.class))).thenReturn(mockHttpResponse); 
    Mockito.when(mockHttpResponse.getStatusLine()).thenReturn(mockStatusLine); 
    Mockito.when(mockStatusLine.getStatusCode()).thenReturn(HttpStatus.SC_OK); 
    Mockito.when(mockHttpResponse.getEntity()).thenReturn(mockHttpEntity); 

} 


@Test 
underTest = new UnderTest(initialize with fake API (api)); 
//Trigger method to test 

Это дает мне ошибку:

java.net.UnknownHostException: api: nodename nor servname provided, or not known

Почему т не дразнят 'client.execute(get)' вызов как в настроить?

+0

Вы правы в том, что он выполняет реальный сетевой материал. Ожидается ли это после издевательств над клиентом и запроса на получение? Должен ли он просто возвращать объект типа HttpResponse без фактического сетевого вызова? –

+0

Есть ли способ активировать эти издевательства? Моя путаница заключается в том, как активировать mocks, когда код yries инициализирует эти объекты. –

+0

Спасибо, это была быстрая обратная связь; на один шаг ближе к удару дневного лимита сегодня ;-) – GhostCat

ответ

0

То, что вы до сих пор:

mockHttpClient = Mockito.mock(HttpClient.class); 
Mockito.when(mockHttpClient.execute(Mockito.isA(HttpGet.class))).thenReturn(mockHttpResponse) 

Так есть издеваться, который должен реагировать на призыв execute().

И тогда у вас есть:

1) underTest = new UnderTest(initialize with fake API (api)); 
2) // Trigger method to test 

Проблема заключается в том: что-то либо не так с вашей линии 1 или 2 линии в вашей установке. Но мы не можем сказать вам, что; потому что вы не предоставляете нам этот код.

Дело в том: чтобы ваш издеваться объект, чтобы быть полезной, она должна быть используется по underTest каким-то образом. Поэтому, когда вы как-то делаете что-то из инициализации, тогда underTest не использует насмешку, а некоторую «настоящую» вещь.

+0

Спасибо, это имеет смысл сейчас. –