我正在尝试测试此方法。
I am trying to test this method.
@Override public JSON connectResource() throws IOException { //get the location and credentials for the certificates System.setProperty("javax.ssl.trustStore", "C:/Program Files/Java/jdk1.7.0_40/jre/lib/security/cacerts"); System.setProperty("javax.ssl.trustStorePassword", "changeit"); HttpRequest httpRequest = new HttpGet(url); System.out.println("hello"); httpRequest.addHeader("Accept", "application/json"); HttpResponse response = httpClient.execute((HttpUriRequest) httpRequest); System.out.println("hello1"); HttpEntity httpEntity = response.getEntity(); String data = this.getData(httpEntity); return JSONSerializer.toJSON(data.toString()); }我的设置方法是:
@Before public void setUp() throws Exception{ mockHttpClient = mock(DefaultHttpClient.class); mockHttpRequest = mock(HttpUriRequest.class); mockHttpResponse = mock(BasicHttpResponse.class); mockHttpEntity = mock(HttpEntity.class); mockInputStream = mock(InputStream.class); mockInputStreamReader = mock(InputStreamReader.class); mockBufferedReader = mock(BufferedReader.class); mockHttpGet = mock(HttpGet.class); mockHttpRequestBase = mock(HttpRequestBase.class); //when(mockHttpClient.execute(Mockito.isA(HttpUriRequest.class))).thenReturn(mockHttpResponse); //when(mockHttpClient.execute(mockHttpRequest)).thenReturn(mockHttpResponse); //when(mockHttpClient.execute(mockHttpRequestBase)).thenReturn(mockHttpResponse); //when(mockHttpClient.execute(mockHttpGet)).thenReturn(mockHttpResponse); when(mockHttpResponse.getEntity()).thenReturn(mockHttpEntity); when(mockHttpEntity.getContent()).thenReturn(mockInputStream); PowerMockito.whenNew(InputStreamReader.class) .withArguments(mockInputStream).thenReturn(mockInputStreamReader); PowerMockito.whenNew(BufferedReader.class) .withArguments(mockInputStreamReader).thenReturn(mockBufferedReader); PowerMockito.when(mockBufferedReader.readLine()) .thenReturn(JSON_STRING) .thenReturn(null); PowerMockito.whenNew(HttpGet.class).withArguments(VALID_URL) .thenReturn(mockHttpGet); }我的测试用例是:
@Test public void testConnectResource() throws IOException { when(mockHttpClient.execute(mockHttpGet)).thenReturn(mockHttpResponse); HttpConnectGithub connHandle = new HttpConnectGithub(VALID_URL); JSON jsonObject = connHandle.connectResource(); System.out.println(jsonObject); //assertThat(jsonObject, instanceOf(JSON.class)); }然而,执行在
HttpResponse response = httpClient.execute((HttpUriRequest) httpRequest);你可以在我的设置方法的评论中看到我尝试的所有内容。 有没有人发现任何问题?我通过我的测试用例进行了调试,并且所有模拟对象都已正确初始化。 我尝试过交换HttpUriRequest和HttpRequest,HttpResponse和BasicHttpResponse等但没有太多运气。 请指导如何解决这个问题。
you can see all that I tried in the comments of my set up method. Does anyone find an issue with anything? I debugged through my test case and all mock objects are properly initialized. I have tried exchanging HttpUriRequest and HttpRequest, HttpResponse and BasicHttpResponse etc but without much luck. Please guide on how to tackle this issue.
推荐答案问题出在mockHttpClient上。由于某种原因,它无法自动模拟它。修复是通过某种方法(在我的例子中是构造函数)将httpclient作为参数传递
The problem is with mockHttpClient. It is not able to mock it automatically for some reason. The fix is to pass httpclient as a parameter through some method (constructor in my case)
更多推荐
模拟HttpClient.execute问题:Mockito
发布评论