也在这里分享:https ://github.com/tomakehurst/wiremock/issues/625
我正在编写一个集成测试来验证与 REST API 交互的应用程序是否正确处理了不成功的请求。为此,我想模拟一个向 HTTP 端点发出两次 GET 请求的场景。第一次请求不成功,响应状态码为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 的不同响应?