PowerMockito.doReturn返回null

这是我的课程正在测试:

public class A {

public Integer callMethod(){

return someMethod();

}

private Integer someMethod(){

//Some Code

HttpPost httpPost = new HttpPost(oAuthMessage.URL);

//Some Code

HttpClient httpClient = new DefaultHttpClient();

HttpResponse httpResponse = httpClient.execute(httpPost); ------1

Integer code = httpResponse.getStatusLine().getStatusCode(); ---2

return code;

}

现在我要模拟第1和2行,并返回模拟HttpResponse和代码。

我已经尝试过但是失败了:

@RunWith(PowerMockRunner.class)

@PowerMockIgnore("javax.crypto.*")

public class TestA {

//Spying some things here & Injecting them

@Test

public void testA() {

DefaultHttpClient defaultHttpClientMock = PowerMockito.mock(DefaultHttpClient.class);

HttpResponse httpResponse = PowerMockito.mock(HttpResponse.class, RETURNS_DEEP_STUBS);

HttpClient httpClient = PowerMockito.mock(HttpClient.class);

//HttpResponse httpResponseMock PowerMockito.mock(HttpResponse.class);

HttpPost httpPost = PowerMockito.mock(HttpPost.class);

PowerMockito.whenNew(DefaultHttpClient.class).withNoArguments().thenReturn(defaultHttpClientMock);

PowerMockito.doReturn(httpResponse).when(httpClient).execute(httpPost); //Returns null. It never returns httpResponse.

PowerMockito.when(httpResponse.getStatusLine().getStatusCode()).thenReturn(anyInt());

//call the method

}

PowerMockito.doReturn(httpResponse).when(httpClient).execute(httpPost)始终返回null。我希望它返回的模拟对象HttpResponse。我已经阅读了与此错误相关的其他帖子,但不确定该如何处理。有人可以帮忙吗?

回答:

代替

PowerMockito.doReturn(httpResponse).when(httpClient).execute(httpPost);

你应该使用

PowerMockito.when(httpResponse.execute(httpPost)).thenReturn(httpResponse);

您的测试中还存在一些问题:模拟构造函数不正确,并且根本不需要httpResponse。

此代码对我而言正常工作:

@RunWith(PowerMockRunner.class)

@PowerMockIgnore("javax.crypto.*")

@PrepareForTest({ HttpPost.class, DefaultHttpClient.class, A.class })

public class TestA {

@Test

public void testA() throws Exception {

HttpPost httpPost = Mockito.mock(HttpPost.class);

PowerMockito.whenNew(HttpPost.class).withArguments(oAuthMessage.URL).thenReturn(httpPost);

DefaultHttpClient defaultHttpClientMock = PowerMockito.mock(DefaultHttpClient.class);

HttpResponse httpResponse = PowerMockito.mock(HttpResponse.class);

PowerMockito.whenNew(DefaultHttpClient.class).withNoArguments().thenReturn(defaultHttpClientMock);

PowerMockito.when(defaultHttpClientMock.execute(httpPost)).thenReturn(httpResponse);

StatusLine statusLine = PowerMockito.mock(StatusLine.class);

PowerMockito.when(httpResponse.getStatusLine()).thenReturn(statusLine);

Integer expected = new Integer(0);

PowerMockito.when(statusLine.getStatusCode()).thenReturn(expected);

A a = new A();

Assert.assertEquals(expected, a.callMethod());

}

}

以上是 PowerMockito.doReturn返回null 的全部内容, 来源链接: utcz.com/qa/426030.html

回到顶部