Как смоделировать метод объекта, используя PowerMockito? - PullRequest
0 голосов
/ 08 января 2020

У меня есть класс, который содержит метод, который я хочу проверить. Вот класс.

class classOne {
private static boolean doneThis = false;
methodOne() {
 CloseableHttpResponse response = SomeClass.postData(paramOne, paramTwo);
                log.info("res - {}", response.getStatusLine().getStatusCode());
                doneThis = true;
}
}

Теперь я хочу смоделировать часть response.getStatusLine (). GetStatusCode (), используя PowerMockito.

Как я могу добиться этого? Это то, что я сделал, но это (2-я строка ниже) получает исключение NullPointerException.

CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
PowerMockito.when(response.getStatusLine().getStatusCode()).thenReturn(200);

Вот как я издеваюсь над Someclass.postData ->

PowerMockito.mockStatic(SomeClass.class);
ParamOne paramOne = new ParamOne(..);
// same for paramTwo    
   PowerMockito.when(SomeClass.postData(paramOne,paramTwo)).thenReturn(response);

Обновлено code:

CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
StatusLine statusLine = PowerMockito.mock(StatusLine.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);

Проблема в том, что mocked getStatusCode () возвращает ожидаемое значение в методе Test, но в случае реального класса строки рядом с ним не покрываются, т. е. тест не проходит в этот момент. Обход

1 Ответ

2 голосов
/ 08 января 2020

Конечно, сначала вы должны смоделировать

response.getStatusLine()

, в противном случае возвращаемое значение по умолчанию равно null, а вызов .getStatusCode() для null приводит к NullPointerException.

CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
? statusLine = PowerMockito.mock(?.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);

Заменить ? фактическим классом statusLine.

...