如何使用 PowerMockito 模拟对象的方法?
How to mock an object's method using PowerMockito?
我有一个 class,其中包含一个我想测试的方法。这是 class.
class classOne {
private static boolean doneThis = false;
methodOne() {
CloseableHttpResponse response = SomeClass.postData(paramOne, paramTwo);
log.info("res - {}", response.getStatusLine().getStatusCode());
doneThis = true;
}
}
现在,我想使用 PowerMockito 模拟 response.getStatusLine().getStatusCode() 部分。
我怎样才能做到这一点?这就是我所做的,但它(下面的第二行)得到了 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);
更新代码:
CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
StatusLine statusLine = PowerMockito.mock(StatusLine.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);
问题是,模拟的 getStatusCode() 在 Test 方法中返回预期值 - 但在实际 class 的情况下,它旁边的行没有被覆盖,即测试是在那一点上失败了。解决方法?
当然要先mock
response.getStatusLine()
否则默认 return 值为 null
并且在 null
上调用 .getStatusCode()
会导致 NullPointerException
.
CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
? statusLine = PowerMockito.mock(?.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);
将?
替换为statusLine
的实际class。
我有一个 class,其中包含一个我想测试的方法。这是 class.
class classOne {
private static boolean doneThis = false;
methodOne() {
CloseableHttpResponse response = SomeClass.postData(paramOne, paramTwo);
log.info("res - {}", response.getStatusLine().getStatusCode());
doneThis = true;
}
}
现在,我想使用 PowerMockito 模拟 response.getStatusLine().getStatusCode() 部分。
我怎样才能做到这一点?这就是我所做的,但它(下面的第二行)得到了 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);
更新代码:
CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
StatusLine statusLine = PowerMockito.mock(StatusLine.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);
问题是,模拟的 getStatusCode() 在 Test 方法中返回预期值 - 但在实际 class 的情况下,它旁边的行没有被覆盖,即测试是在那一点上失败了。解决方法?
当然要先mock
response.getStatusLine()
否则默认 return 值为 null
并且在 null
上调用 .getStatusCode()
会导致 NullPointerException
.
CloseableHttpResponse response = PowerMockito.mock(CloseableHttpResponse.class);
? statusLine = PowerMockito.mock(?.class);
PowerMockito.when(response.getStatusLine()).thenReturn(statusLine);
PowerMockito.when(statusLine.getStatusCode()).thenReturn(200);
将?
替换为statusLine
的实际class。