2016-09-19 9 views
1

Я работаю над некоторым устаревшим кодом, который хранит файлы на удаленном сервере. Я хотел бы использовать Apache DefaultHttpRequestRetryHandler для реализации логики повтора. Ниже приведен упрощенный вариант реализации. Как проверить свою логику повтора?Модульное тестирование DefaultHttpRequestRetryHandler

Я смог вручную протестировать его, переопределив retryRequest() в классе DefaultHttpRequestRetryHandler, но автоматическим способом было бы хорошо. (Я использую Спок, чтобы проверить.)

private CloseableHttpClient getHttpClient() { 
     DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(); 
     CloseableHttpClient httpClient = HttpClients.custom().setRetryHandler(retryHandler).build(); 
     return httpClient; 
    } 

    public CloseableHttpResponse uploadFile(){  
     CloseableHttpClient httpClient = getHttpClient(); 
     CloseableHttpResponse response = null; 
     try { 
      response = httpClient.execute(post, getHttpContext()); 
     } catch (Exception ex) { 
      //handle exception 
     } 
     return response;  
    } 

ответ

3

Вы могли бы попытаться использовать WireMock, с помощью следующего правила:

@Rule 
public WireMockRule wireMockRule = new WireMockRule(8080); 

@Test 
public void testRetry() 
    throws Exception { 
    WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/retry")) 
        .inScenario("retry") 
        .whenScenarioStateIs(Scenario.STARTED) 
        .willSetStateTo("first try").willReturn(aResponse().withBody("error").withStatus(500))); 
    WireMock.stubFor(
      WireMock.get(WireMock.urlEqualTo("/retry")) 
        .inScenario("retry") 
        .whenScenarioStateIs(Scenario.STARTED) 
        .willSetStateTo("first try").willReturn(aResponse().withBody("OK").withStatus(200))); 
    Integer responseCode = new TestClass().getHttpClient().execute(new HttpHost("localhost", 8080), new HttpGet("http://localhost:8080/retry")).getStatusLine().getStatusCode(); 
    assertThat(responseCode, is(200)) 
} 
+2

Добавления объяснения о том, как эта связь отвечает на вопрос поможет будущим посетителям , – JAL