2016-09-19 5 views
1

Ich arbeite an einigen Legacy-Code, der Dateien auf einem Remote-Server speichert. Ich möchte Apache DefaultHttpRequestRetryHandler verwenden, um eine Wiederholungslogik zu implementieren. Eine vereinfachte Version der Implementierung ist unten gezeigt. Wie kann ich meine Wiederholungslogik testen?Unit-Tests DefaultHttpRequestRetryHandler

Ich konnte es manuell testen durch Überschreiben retryRequest() in der DefaultHttpRequestRetryHandler-Klasse, aber ein automatisierter Weg wäre nett. (Ich bin mit Spock zu testen.)

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

Antwort

3

Sie könnten wahrscheinlich versuchen WireMock zu verwenden, mit einer Regel wie:

@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

eine Erklärung hinzufügen, wie diese Verbindung beantwortet die Frage würde zukünftige Besuchern helfen . – JAL

Verwandte Themen