Java HttpURLConnection返回200始终在mockito中

Java HttpURLConnection返回200始终在mockito中,java,junit,powermockito,Java,Junit,Powermockito,我正在用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

我正在用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();
}
实施


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

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

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

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

}

如何将模拟的HttpURLConnection注入到任务对象中???更新了问题。我没有注射连接。它是一个局部变量。因此,task.call正在进行实际的HttpURLConnection,而不是使用模拟对象。一种方法是使用任务类的构造函数将URLConnection作为参数。将其存储为类级变量并使用它进行调用。你需要折射你的代码才能测试出来。这正是我为解决我的问题所做的。谢谢
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyTask.class})
public class MyTaskTest {

}