Насмешливый httpclient v4 в Java Mockito - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть Java-клиент Apache, написанный как:

public  JSONObject  createProject(String accessToken) throws PostEditException {
    JSONObject jobj = new JSONObject();
    HttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost("https://"+HOST_TRANSPORT+"/api/projects/create");
    try{
      post.addHeader("Content-Type","application/json");
      post.addHeader("Accept","application/json");
      String authorizationValue = "Bearer "+accessToken;
      post.addHeader("Authorization",authorizationValue);
      HttpResponse response = client.execute(post);
      if (response == null) {
        System.out.println("this is null");
      }
      int code = response.getStatusLine().getStatusCode();

      if (code != 200) {
        HttpEntity entity = response.getEntity();
        ContentType contentType = ContentType.getOrDefault(entity);
        Charset charset = contentType.getCharset();
        if (charset == null) {
          charset = Charset.forName("UTF-8");
        }
        String errorBody = EntityUtils.toString(entity, charset);
        log.info("createProject: Unable to process request.  HTTP code: " + code + " responseBody: " + errorBody);
        throw new PostEditException("createProject: Unable to process createProject request.  HTTP code: " + code + " responseBody: " + errorBody);
      } else {
        HttpEntity entity = response.getEntity();
        ContentType contentType = ContentType.getOrDefault(entity);
        Charset charset = contentType.getCharset();
        if (charset == null) {
          charset = Charset.forName("UTF-8");
        }
        String taggedResult = EntityUtils.toString(entity, charset);
        jobj = new JSONObject(taggedResult) ;
      }

    }catch (NoRouteToHostException re) {
      log.error("createProject: unable to route to host."+re);
      throw new PostEditException("createProject: unable to route to host.",re);
    }catch (IOException ie) {
      log.error("createProject: problem executing HTTP request."+ ie);
      throw new PostEditException("createProject: problem executing HTTP request.",ie);
    }catch (Exception e) {
      log.error("createProject: an error occurred." +e );
      throw new PostEditException("createProject: an error occurred",e);
    } finally {
      post.releaseConnection();
    }
    return jobj;
  } //createProject

, поэтому я пытаюсь написать контрольный пример для насмешки над HttpClient.

, поэтому я написал контрольный пример Mockito как:

PowerMockito.mockStatic(HttpClientBuilder.class);
    HttpClientBuilder builderMock = Mockito.mock(HttpClientBuilder.class);
    PowerMockito.doReturn(builderMock).when(HttpClientBuilder.class, "create");

    HttpClient clientMock = Mockito.mock(CloseableHttpClient.class);
    CloseableHttpResponse responseMock = Mockito.mock(CloseableHttpResponse.class);

    Mockito.doReturn(clientMock).when(builderMock).build();
    Mockito.doReturn(responseMock).when(clientMock).execute(Mockito.any());

    classname obj= new classname();
    Method m = classname.class.getDeclaredMethod("createProject", String.class);
   JSONObject result =(JSONObject) m.invoke(obj,"accesstoken");

Но когда я отлаживаю программу, я вижу реальный httpclient вместо поддельного.Как создать фиктивный httpclient, чтобы я мог также высмеивать статус и ответ.

...