ここでも共有されています:https://github.com/tomakehurst/wiremock/issues/625
REST API とやり取りするアプリケーションが失敗したリクエストを適切に処理することを確認するための統合テストを作成しています。これを行うには、HTTP エンドポイントに対して GET リクエストが 2 回行われるシナリオをシミュレートします。1 回目はリクエストが成功せず、応答ステータス コードが 500 になります。2 回目はリクエストが成功し、応答ステータス コードが 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")));
}
2番目のStubMappingが最初のStubMappingを上書きしないようにする方法はありますか?最初のdoSomething()
リクエストを確実に行うために、ステータスコード500の応答返され、2回目はステータスコード200の異なる応答返されますか?
ベストアンサー1
これがシナリオ機能の目的です。
両方のスタブをシナリオ (つまり、同じシナリオ名) に配置し、最初のスタブが新しい状態への遷移をトリガーするようにし、次に 2 番目のスタブがシナリオが 2 番目の状態にあることを条件とし、最初のスタブがシナリオが状態にあることを条件とするようにする必要がありますSTARTED
。
見る:ステートフルビヘイビア