WireMock のカスタマイズ
このセクションでは、WireMock (英語) の操作方法をカスタマイズする方法を示します。
独自の WireMock 内線番号の登録
WireMock を使用すると、カスタム拡張機能を登録できます。デフォルトでは、Spring Cloud Contract はトランスフォーマーを登録します。これにより、レスポンスからリクエストを参照できるようになります。独自の拡張機能を提供したい場合は、org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions
インターフェースの実装を登録できます。spring.factories
拡張アプローチを使用しているため、META-INF/spring.factories
ファイルに次のようなエントリを作成できます。
org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions=\
org.springframework.cloud.contract.stubrunner.provider.wiremock.TestWireMockExtensions
org.springframework.cloud.contract.spec.ContractConverter=\
org.springframework.cloud.contract.stubrunner.TestCustomYamlContractConverter
次の例は、カスタム拡張機能を示しています。
import com.github.tomakehurst.wiremock.extension.Extension
/**
* Extension that registers the default transformer and the custom one
*/
class TestWireMockExtensions implements WireMockExtensions {
@Override
List<Extension> extensions() {
return [
new DefaultResponseTransformer(),
new CustomExtension()
]
}
}
class CustomExtension implements Extension {
@Override
String getName() {
return "foo-transformer"
}
}
変換を明示的に必要とするマッピングにのみ変換を適用したい場合は、applyGlobally() メソッドをオーバーライドして false に設定します。 |
WireMock 構成のカスタマイズ
org.springframework.cloud.contract.wiremock.WireMockConfigurationCustomizer
型の Bean を登録して、WireMock 構成をカスタマイズできます (カスタムトランスを追加するなど)。次の例は、その方法を示しています。
@Bean
WireMockConfigurationCustomizer optionsCustomizer() {
return new WireMockConfigurationCustomizer() {
@Override
public void customize(WireMockConfiguration options) {
// perform your customization here
}
};
}
メタデータによる WireMock のカスタマイズ
バージョン 3.0.0 では、契約に metadata
を設定できます。wiremock
と等しいキーを持つエントリを設定し、その値が有効な WireMock の StubMapping
JSON/ マップまたは実際の StubMapping
オブジェクトになる場合、Spring Cloud Contract は生成されたスタブにカスタマイズの一部をパッチします。次の例を見てみましょう
metadata
セクションでは、キー wiremock
を持つエントリを設定しました。その値は、生成されたスタブに遅延を設定する JSON StubMapping
です。このようなコードにより、次のマージされた WireMock JSON スタブを取得できます。
{
"id" : "ebae49e2-a2a3-490c-a57f-ba28e26b81ea",
"request" : {
"url" : "/yamlfrauds",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "{\"count\":200}",
"headers" : {
"Content-Type" : "application/json"
},
"fixedDelayMilliseconds" : 2000,
"transformers" : [ "response-template" ]
},
"uuid" : "ebae49e2-a2a3-490c-a57f-ba28e26b81ea"
}
現在の実装では、スタブ側のみを操作できます (生成されたテストは変更しません)。また、変更されないのは、リクエスト全体、レスポンスの本文とヘッダーです。
メタデータとカスタムプロセッサーによる WireMock のカスタマイズ
カスタム WireMock StubMapping
後処理を適用する場合は、META-INF/spring.factories
の下、org.springframework.cloud.contract.verifier.converter.StubProcessor
キーで独自のスタブプロセッサーの実装を登録できます。便宜上、WireMock 専用の org.springframework.cloud.contract.verifier.wiremock.WireMockStubPostProcessor
というインターフェースを作成しました。
ポストプロセッサーが特定の契約に適用できるかどうか、およびポストプロセスがどのようになるべきかを Spring Cloud Contract に通知するメソッドを実装する必要があります。
コンシューマー側では、Stub Runner を使用する場合、選択したカスタム拡張機能を登録するカスタム HttpServerStubConfigurer 実装 (例: WireMockHttpServerStubConfigurer を継承する実装) を渡すことを忘れないでください。そうしないと、クラスパス上にカスタム WireMock 拡張機能があっても、WireMock はそれに気付かず、適用せず、指定された拡張機能が見つからなかったことを示す警告文を出力します。 |