title: Mocking execte() method of HttpClient
body: <p>I want to mock <code>execute</code> method of <code>HttpClass</code> to return a dummy response, but my test code is acutally executing the request.</p>
  
  <p>Class Code -</p>
  
  <pre><code>class MyService {
  
      private CloseableHttpClient newHttpClient() {
  
          try {
              SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                      new SSLContextBuilder().loadTrustMaterial(TrustAllStrategy.INSTANCE).build(),
                      NoopHostnameVerifier.INSTANCE);
  
              return HttpClients.custom().setSSLSocketFactory(sslsf).build();
          } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException exception) {
              logger.error(exception);
          }
  
          return null;
      }
  
      public String create(CreateRequestDTO Request) {
  
          CloseableHttpClient client = newHttpClient();
          CloseableHttpResponse response = null;
  
          HttpPut httpPut = new HttpPut("MyUrl...");
  
          try {
              response = client.execute(httpPut);
          } catch (IOException exception) {
              return "exception";
          }
          return response.toString();
      }
  }
  </code></pre>
  
  <p>Test class code - </p>
  
  <pre><code>@PrepareForTest({ MyService.class })
  @PowerMockIgnore({ "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*", "com.sun.org.apache.xalan.*",
          "javax.activation.*", "javax.management.*", "javax.net.ssl.*", "javax.crypto.*" })
  @RunWith(PowerMockRunner.class)
  public class MyServiceTest {
  
      @InjectMocks
      private MyService MyService;
  
      @Mock
      private CloseableHttpClient closeableHttpClient;
  
      @Mock
      private HttpClient httpClient;
  
      @Mock
      private CloseableHttpResponse closeableHttpResponse;
  
      @Mock
      private HttpPut httpPut;
  
      @Mock
      private HttpEntity httpEntity;
  
      @Before
      public void setupTest() {
          MockitoAnnotations.initMocks(this);
      }
  
      @Test
      public void testCreate() throws Exception {
          // MyService MyServiceSpy = PowerMockito.spy(MyService);
          MyService MyServiceSpy = PowerMockito.spy(MyService);
          CreateRequestDTO createRequestDTO = new CreateRequestDTO();
          createRequestDTO.setLocation("room 1");
          createRequestDTO.setStartTime("3 pm");
          createRequestDTO.setEndTime("4 pm");
  
          try {
  
              PowerMockito.doReturn(closeableHttpClient).when(MyServiceSpy, "newHttpClient");
  
              // PowerMockito.when(MyServiceSpy,
              // "newHttpClient").thenReturn(httpClient);
  
              // PowerMockito.verifyPrivate(MyServiceSpy).invoke("newHttpClient");
  
              String jsonEntity = " created successfully";
  
              HttpEntity httpEntity = EntityBuilder.create().setText(jsonEntity)
                      .setContentType(org.apache.http.entity.ContentType.APPLICATION_JSON).build();
  
              closeableHttpResponse.setEntity(httpEntity);
  
              PowerMockito.doReturn(closeableHttpResponse).when(closeableHttpClient).execute(any(HttpPut.class));
              // PowerMockito.doReturn(closeableHttpResponse).when(httpClient).execute(any(HttpPut.class));
  
              String res = MyService.create(createRequestDTO);
              logger.info("Result from create : " + res);
              Assert.assertTrue(res.substring(0, 5).matches("BEGIN"));
  
          } catch (Exception e) {
              e.printStackTrace();
              throw e;
          }
      }
  
  }
  </code></pre>
  
  <p>I have tried Mockito instead instead of PowerMockito, but still request is executed in real.</p>