openid プロバイダー クラスをテストしようとしています。openid コンシューマー クラスが http 要求を行っています。ワイヤーモックを使用して、このリクエストへの応答をモックしています。有効な openid 応答をモックしようとしています。ただし、有効な応答はリクエスト パラメータによって異なります。ワイヤーモックを使用して、応答の本文が要求パラメーターに依存するモック要求を設定できますか?
5 に答える
これは可能です。ResponseTansformer を使用するだけです。以下のコード例では、responseDefinition は以下に示すスタブによって決定されます。ここでは、本体のバイトを呼び出し元に返すだけでエンコード サービスをモックしています。トランスフォーマーではありますが、依頼内容に応じて好きなように返せます。
int port = 8080;
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() {
@Override
public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) {
return new ResponseDefinitionBuilder().like(responseDefinition)
.withBody(request.getBodyAsString().getBytes())
.build();
}
@Override
public String name() {
return "request body returning request transformer";
}
}));
wireMockServer.start();
WireMock.configureFor("localhost", port);
stubFor(post(urlEqualTo("/encode"))
.willReturn(aResponse()
.withHeader("Content-Type", "application/octet-stream")
.withStatus(200)));
stubFor(post(urlEqualTo("/decode"))
.willReturn(aResponse()
.withHeader("Content-Type", "application/octet-stream")
.withStatus(200)));
私の知る限り、WireMock での私の経験では、いいえ。
リクエストを介して渡された引数でレスポンスをパラメータ化することはできません。あなたができる最善の方法は、マッチャーを使用して、モックされたサーバーがそれに応じて応答するようにすることです。
そのような場合にリクエスト/レスポンスをテストするために、プレーンな jUnit でいくつかの単体テストまたは統合テストを作成することをお勧めします。受信リクエストが正しく応答していることをテストしたい場合は、より高速になるはずです。WireMock は、他の REST サービスとのインターフェイスが壊れていないことを確認するための受け入れテストの代替手段と考えています。
はい、wiremock で一致するリクエストでスタブを作成することは可能です。次の属性は、リクエスト マッチング リクエストでサポートされています。
- URL
- HTTP メソッド
- クエリ パラメータ
- ヘッダー
- 基本認証 (ヘッダー照合の特殊なケース)
- クッキー
- リクエスト本文
- マルチパート/フォームデータ
あなたのシナリオでは、リクエスト本文の値にマッチングを適用したい場合は、以下のアプローチを使用してスタブを生成できます。
{
"request": {
...
"bodyPatterns" : [ {
"equalToJson" : "{ \"total_results\": 4 }"
} ]
...
},
...
}
詳細については、リンクをたどってください: http://wiremock.org/docs/request-matching/