Также опубликовано здесь: https://github.com/tomakehurst/wiremock/issues/625
Я пишу интеграционный тест, чтобы убедиться, что мое приложение, взаимодействующее с REST API, должным образом обрабатывает неудачные запросы. Для этого я хочу смоделировать сценарий, в котором запросы GET отправляются дважды к конечной точке HTTP. В первый раз запрос не выполняется с кодом состояния ответа 500; во второй раз запрос выполняется успешно с кодом состояния ответа 200. Рассмотрим пример ниже:
@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort()
.dynamicHttpsPort());
@Test
public void testRetryScenario(){
// First StubMapping
stubFor(get(urlEqualTo("/my/resource"))
.withHeader("Accept", equalTo("text/xml"))
.willReturn(aResponse()
.withStatus(500) // request unsuccessful with status code 500
.withHeader("Content-Type", "text/xml")
.withBody("<response>Some content</response>")));
// Second StubMapping
stubFor(get(urlEqualTo("/my/resource"))
.withHeader("Accept", equalTo("text/xml"))
.willReturn(aResponse()
.withStatus(200) // request successful with status code 200
.withHeader("Content-Type", "text/xml")
.withBody("<response>Some content</response>")));
//Method under test that makes calls to endpoint
doSomething();
Thread.sleep(5000);
//Verify GET request was made again after first attempt
verify(exactly(2), getRequestedFor(urlEqualTo("/my/resource")));
}
Есть ли способ избежать переопределения второго StubMapping первого - чтобы при первом запросе doSomething()
возвращался ответ с кодом состояния 500, а во второй раз возвращается другой ответ с кодом состояния 200?