私はJunitとMockitoを使ってテストしたい次のコードを持っています。テストへmockitoでHttpClientリクエストを嘲笑
コード:
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
なぜtは'client.execute(get)'
呼び出しを模擬しませんがセットアップ?
あなたは実際のネットワークのものを実行しているという点で正しいです。これは、クライアントとget要求を嘲笑した後に期待されていますか?実際のネットワークコールを行わずにHttpResponse型のオブジェクトを返すだけでいいですか? –
これらのモックをアクティブにする方法はありますか?私の混乱は、コードがこれらのオブジェクトを初期化しようとするときにモックをアクティブにする方法です。 –
ありがとう、それはすぐにフィードバックでした。 1日の上限を今日打つことに一歩近づく;-) – GhostCat