gpt4 book ai didi

java - PowerMockito.doReturn 返回 null

转载 作者:行者123 更新时间:2023-12-01 09:38:56 28 4
gpt4 key购买 nike

这是我正在测试的类(class):

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());
}
}

关于java - PowerMockito.doReturn 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38604848/

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