HttpURLConnection returns 200 总是在 mockito 中
HttpURLConnection returns 200 always in mockito
我是 运行 测试 HttpURLConnection
。但是我想return 204作为响应码。
@Test
public void should_return_result_with_success_data() throws Exception {
HttpURLConnection urlConnection = PowerMockito.mock(HttpURLConnection.class);
URL finalUrl = PowerMockito.mock(URL.class);
PowerMockito.whenNew(URL.class).withArguments("http://sample.com").thenReturn(finalUrl);
PowerMockito.when(finalUrl.openConnection()).thenReturn(urlConnection);
PowerMockito.when(urlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NO_CONTENT);
task.call();
}
实施
@Override
public EventResult call() throws Exception {
url = url.concat(URLEncoder.encode(data, StandardCharsets.UTF_8.name()));
HttpURLConnection connection = (HttpURLConnection) new URL("http://sample.com").openConnection();
connection.setConnectTimeout(connectionTimeout);
connection.setReadTimeout(readTimeout);
EventResult eventResult = new EventResult();
eventResult.setHttpStatusCode(connection.getResponseCode());
if (connection.getResponseCode() == HttpURLConnection.HTTP_NO_CONTENT) {
return eventResult;
} else {
eventResult = JsonPojoConverter.getEventResult(IOUtils.toString(connection.getErrorStream(), StandardCharsets.UTF_8.name()));
}
return eventResult;
}
为什么它总是 returns 200 响应代码。是否有任何解决方法来获得 204 returned?
每当我们使用 whenNew 模拟方法本地实例化时,我们必须添加在 prepareForTest 中实例化的方法的类名。
如果方法调用的className是MyTask,那么将其添加到prepareForTest中,如下所示。
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyTask.class})
public class MyTaskTest {
}
我是 运行 测试 HttpURLConnection
。但是我想return 204作为响应码。
@Test
public void should_return_result_with_success_data() throws Exception {
HttpURLConnection urlConnection = PowerMockito.mock(HttpURLConnection.class);
URL finalUrl = PowerMockito.mock(URL.class);
PowerMockito.whenNew(URL.class).withArguments("http://sample.com").thenReturn(finalUrl);
PowerMockito.when(finalUrl.openConnection()).thenReturn(urlConnection);
PowerMockito.when(urlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NO_CONTENT);
task.call();
}
实施
@Override
public EventResult call() throws Exception {
url = url.concat(URLEncoder.encode(data, StandardCharsets.UTF_8.name()));
HttpURLConnection connection = (HttpURLConnection) new URL("http://sample.com").openConnection();
connection.setConnectTimeout(connectionTimeout);
connection.setReadTimeout(readTimeout);
EventResult eventResult = new EventResult();
eventResult.setHttpStatusCode(connection.getResponseCode());
if (connection.getResponseCode() == HttpURLConnection.HTTP_NO_CONTENT) {
return eventResult;
} else {
eventResult = JsonPojoConverter.getEventResult(IOUtils.toString(connection.getErrorStream(), StandardCharsets.UTF_8.name()));
}
return eventResult;
}
为什么它总是 returns 200 响应代码。是否有任何解决方法来获得 204 returned?
每当我们使用 whenNew 模拟方法本地实例化时,我们必须添加在 prepareForTest 中实例化的方法的类名。
如果方法调用的className是MyTask,那么将其添加到prepareForTest中,如下所示。
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyTask.class})
public class MyTaskTest {
}