невозможно смоделировать метод httpClient.execute с помощью PowerMock

1

Я использую EasyMock с PowerMock, чтобы высмеять внешний вызов WS. Я мог бы высмеять метод getHttpClient, который является частным методом и возвращает CloseableHttpClient, но я не могу издеваться над вызовом httpClient.execute(httpPost). Я получаю null как httpResponse, где, как я ожидаю, 200 http status code.

public class MyWsClient {

public void post(String data) throws Exception {

    CloseableHttpResponse httpResponse = null;
    String url = "http://abc:8080/myapp/mysvc"
    ...
    ....

    try {
        CloseableHttpClient httpClient = getHttpClient();

         HttpPost httpPost = new HttpPost(url);
        //populate the headers
        ....
        //set entity logic goes heres
        ....
        ......
        httpResponse = httpClient.execute(httpPost);


    } catch (Exception e) {
        //exception handling
    }   
  }
}

Прецедент:

@Test
public void testPostWs() {
    try {
        // Given            
        CloseableHttpClient mockHttpClient = EasyMock.createMock(CloseableHttpClient.class);
        CloseableHttpResponse mockResponse = EasyMock.createMock(CloseableHttpResponse.class);
        MyWsClient classUnderTest = PowerMock.createPartialMock(MyWsClient.class, "getHttpClient");

        EasyMock.expect(mockResponse.getStatusLine()).andReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_CREATED, "CREATED!"));


        PowerMock.expectPrivate(classUnderTest, "getHttpClient").andReturn(mockHttpClient);

        EasyMock.expect(mockHttpClient.execute(EasyMock.anyObject(HttpPost.class))).andReturn(mockResponse);
        PowerMock.replayAll(classUnderTest);
        //when
        classUnderTest.post(data);
    }  catch (Exception e) {
        e.printStackTrace();
        Assert.fail();
    }
}   
Теги:
powermock
junit
mocking
easymock

1 ответ

2
Лучший ответ

вам нужно сделать Easymock.replay(mockHttpClient,mockResponse) в конце, чтобы он Easymock.replay(mockHttpClient,mockResponse).

  • 0
    Это сработало. Спасибо огромное за помощь мне с этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню