2016-05-06 42 views
10

Sto scrivendo una sorta di test di integrazione sul mio controller REST utilizzando MockRestServiceServer per simulare il comportamento di backend. Quello che sto cercando di ottenere ora è di simulare una risposta molto lenta dal backend che alla fine porterebbe a un timeout nella mia applicazione. Sembra che possa essere implementato con WireMock ma al momento mi piacerebbe attenermi a MockRestServiceServer.MockRestServiceServer simula il timeout del back-end nel test di integrazione

sto creando server, come questo:

myMock = MockRestServiceServer.createServer(asyncRestTemplate); 

E poi sto beffarda mio comportamento back-end come:

myMock.expect(requestTo("http://myfakeurl.blabla")) 
      .andExpect(method(HttpMethod.GET)) 
      .andRespond(withSuccess(myJsonResponse, MediaType.APPLICATION_JSON)); 

E 'possibile aggiungere un qualche tipo di un ritardo o di timeout o altro tipo di latenza per la risposta (o forse intero server deriso o anche il mio asyncRestTemplate)? O dovrei semplicemente passare a WireMock o forse a Restito?

+0

Vedi anche: https://stackoverflow.com/a/47750157/ 838.434 – MaDa

risposta

0

In generale, è possibile definire il gestore di richieste personalizzato e fare un brutto Thread.sleep() lì.

Questo sarebbe possibile in Restito con qualcosa di simile.

Action waitSomeTime = Action.custom(input -> { 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) { 
     throw new RuntimeException(e); 
    } 
    return input; 
}); 

whenHttp(server).match(get("/asd")) 
     .then(waitSomeTime, ok(), stringContent("Hello World")) 

Non sono sicuro di Spring, tuttavia. Puoi facilmente provare. Controlla DefaultResponseCreator per l'ispirazione.

7

È possibile realizzare test di questa funzionalità in questo modo (Java 8):

myMock 
    .expect(requestTo("http://myfakeurl.blabla")) 
    .andExpect(method(HttpMethod.GET)) 
    .andRespond(request -> { 
     try { 
      Thread.sleep(TimeUnit.SECONDS.toMillis(1)); 
     } catch (InterruptedException ignored) {} 
     return new MockClientHttpResponse(myJsonResponse, HttpStatus.OK); 
    }); 

Ma, devo avvertirvi, che dal MockRestServiceServer sostituisce semplicemente RestTemplate requestFactory le impostazioni requestFactory Saresti andranno perduti nel test di ambiente.

0

Approccio che è possibile effettuare per: Specifica del corpo di risposta con la risorsa Percorso di classe o il contenuto di stringa normale. versione più dettagliata di ciò che Skeeve suggerito sopra

.andRespond(request -> { 
      try { 
       Thread.sleep(TimeUnit.SECONDS.toMillis(5)); // Delay 
      } catch (InterruptedException ignored) {} 
      return withStatus(OK).body(responseBody).contentType(MediaType.APPLICATION_JSON).createResponse(request); 
     }); 
1

In Restito, esiste una funzione Buil-in per simulare timeout:

import static com.xebialabs.restito.semantics.Action.delay 

whenHttp(server). 
    match(get("/something")). 
    then(delay(201), stringContent("{}"))