2016-10-14 19 views
2

なぜPowerMockito.whennullを返すのか分からない。これはテスト対象のクラスです:PowerMockito.whenがnullを返す

public class A { 

public Integer callMethod(){ 
    return someMethod(); 
} 


private Integer someMethod(){ 
    //Some Code 
    HttpPost httpPost = new HttpPost(oAuthMessage.URL); 
    //Some Code 
    HttpClient httpClient = HttpClientBuilder.create().build(); 
    HttpResponse httpResponse = httpClient.execute(httpPost); ------1 
    Integer code = httpResponse.getStatusLine().getStatusCode(); ---2 
    return code; 
} 
} 





@RunWith(PowerMockRunner.class) 
@PrepareForTest({ MacmillanServiceImpl.class, PersonService.class, AuthorizeServiceImpl.class, ProvisionHelper.class, ESPHelper.class, 
     DPFServiceImpl.class, TransactionLogServiceImpl.class, HttpClient.class, HttpEntity.class, InputStream.class, IOUtils.class, 
     DTOUtils.class, MacmillanESPResponseDTO.class, HttpClientBuilder.class, CloseableHttpClient.class, HttpPost.class, IOUtils.class, 
     HttpResponse.class, CloseableHttpResponse.class, StatusLine.class }) 
@PowerMockIgnore({ "javax.crypto.*", "javax.net.ssl.*" }) 
public class TestA { 

//Spying some things here & Injecting them 

@Test 
public void testA() { 


HttpClient httpClientMock = PowerMockito.mock(HttpClient.class); 
HttpClientBuilder httpClientBuilderMock = PowerMockito.mock(HttpClientBuilder.class); 
CloseableHttpClient closeableHttpClientMock = PowerMockito.mock(CloseableHttpClient.class); 
HttpResponse httpResponseMock = PowerMockito.mock(HttpResponse.class); 

PowerMockito.mockStatic(HttpClientBuilder.class); 
given(HttpClientBuilder.create()).willReturn(httpClientBuilderMock); 
when(httpClientBuilderMock.build()).thenReturn(closeableHttpClientMock); 
PowerMockito.when(httpClientMock.execute(httpPost)).thenReturn(httpResponseMock); --This does not work----Line 3 
//Other codes 
//call the method 
} 

私はhttpResponseをnullにします。私は嘲笑してHTTPResponseオブジェクトを取得したいので、私はさらに進めることができます。

私はまた、代わりに3行目の本を試してみました:

CloseableHttpResponse closeableHttpResponse = PowerMockito.mock(CloseableHttpResponse.class); 
PowerMockito.when(closeableHttpClientMock.execute(httpPost)).thenReturn(closeableHttpResponse); 

誰も私を助けることができますか?

答えて

2

模擬時に渡したhttpPostインスタンスが、実行時に渡したインスタンスと同じではないという問題があると思われます。

PowerMockito.when(httpClientMock.execute(Matchers.eq(httpPost))) 
    .thenReturn(httpResponseMock); 
+0

おかげで多くのことを:あなたはこれを解決するために何ができるか

はあなたがあざけるときMatchers.eq()を使用している、whenは、すべてのオブジェクト上で実行されるような方法は、あなたが渡すものに等しいです。私はMatchers.any()を使いました。 – Ajit