gpt4 book ai didi

java - HttpURLConnection 在mockito 中始终返回200

转载 作者:行者123 更新时间:2023-12-02 09:54:07 28 4
gpt4 key购买 nike

我正在使用 HttpURLConnection 运行测试。但我想返回 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;
}

为什么它总是返回 200 响应代码。有什么解决方法可以返回 204 吗?

最佳答案

每当我们使用whenNew模拟方法本地实例化时,我们都必须添加在prepareForTest中实例化的方法的类名。

如果方法调用的className是MyTask,则将其添加到prepareForTest中,如下所示。

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyTask.class})
public class MyTaskTest {

}

关于java - HttpURLConnection 在mockito 中始终返回200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122452/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com