2016-12-30 16 views
1

私は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)'呼び出しを模擬しませんがセットアップ?

+0

あなたは実際のネットワークのものを実行しているという点で正しいです。これは、クライアントとget要求を嘲笑した後に期待されていますか?実際のネットワークコールを行わずにHttpResponse型のオブジェクトを返すだけでいいですか? –

+0

これらのモックをアクティブにする方法はありますか?私の混乱は、コードがこれらのオブジェクトを初期化しようとするときにモックをアクティブにする方法です。 –

+0

ありがとう、それはすぐにフィードバックでした。 1日の上限を今日打つことに一歩近づく;-) – GhostCat

答えて

0

あなたがこれまで持っていることは次のとおりです。

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

だから​​への呼び出しに反応しなければならないモックがあります。

そして、あなたが持っている:

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

問題がある:何かがいずれかのあなたのライン1としたり、セットアップでのライン2と間違っています。しかし、私たちはそれを言うことはできません。あなたが私たちにそのコードを提供していないからです。

事がある:活用するためには、あなたのモックオブジェクトのためには、何らかの形でunderTestでをを使用する必要があります。だから何とかinitのものを間違ってやっていると、underTestは嘲笑されたものを使わず、いくつかの "本当の"ものを使います。

+0

ありがとう、それは今意味があります。 –

関連する問題