2016-10-14 8 views
2

Я не уверен, почему PowerMockito.when возвращает null. Это мой класс под тест: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 
} 

В строке 1-я httpResponse в нуль. Я хочу получить посмеянный объект HTTPResponse, чтобы продолжить.

Я также попытался это вместо линии 3:

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

Может кто-нибудь мне помочь?

ответ

2

Похоже, проблема заключается в том, что экземпляр httpPost, который вы передаете, когда насмехаетесь, не совпадает с экземпляром, который вы передаете при выполнении.

Что вы можете сделать, чтобы решить эту проблему, это использовать Matchers.eq() когда вы издеваться, этак when будет выполняться на каждом объекте равна одному вы передаете:

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

Спасибо большое. Я использовал Matchers.any() – Ajit