3 秒ツアー
プロデューサー側
Spring Cloud Contract の操作を開始するには、Groovy DSL または YAML で表現された REST またはメッセージング契約を含むファイルを、contractsDslDir
プロパティで設定された契約 ディレクトリに追加します。デフォルトでは、$rootDir/src/test/resources/contracts
です。
次に、次の例に示すように、Spring Cloud Contract Verifier 依存関係とプラグインをビルドファイルに追加できます。
次のリストは、プラグインを追加する方法を示しています。プラグインは、ファイルの build/plugins 部分に配置する必要があります。
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>${spring-cloud-contract.version}</version>
<extensions>true</extensions>
</plugin>
./mvnw clean install
を実行すると、追加された契約へのアプリケーションのコンプライアンスを検証するテストが自動的に生成されます。デフォルトでは、テストは org.springframework.cloud.contract.verifier.tests.
で生成されます。
契約で記述された機能の実装がまだ存在しないため、テストは失敗します。
それらをパスさせるには、HTTP リクエストまたはメッセージを処理する正しい実装を追加する必要があります。また、プロジェクトに自動生成されたテストの基本テストクラスを追加する必要があります。このクラスは、自動生成されたすべてのテストによって拡張され、実行するために必要なすべてのセットアップ情報(たとえば、RestAssuredMockMvc
コントローラーセットアップまたはメッセージングテストセットアップ)を含む必要があります。
pom.xml
からの次の例は、基本テストクラスを指定する方法を示しています。
<build>
<plugins>
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>2.1.2.RELEASE</version>
<extensions>true</extensions>
<configuration>
<baseClassForTests>com.example.contractTest.BaseTestClass</baseClassForTests> (1)
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
1 | baseClassForTests 要素を使用すると、基本テストクラスを指定できます。これは、spring-cloud-contract-maven-plugin 内の configuration 要素の子である必要があります。 |
実装とテストの基本クラスが配置されると、テストに合格し、アプリケーションとスタブアーティファクトの両方がビルドされ、ローカル Maven リポジトリにインストールされます。これで変更をマージでき、アプリケーションとスタブアーティファクトの両方をオンラインリポジトリに公開できます。
コンシューマー側
統合テストで Spring Cloud Contract Stub Runner
を使用すると、実際のサービスをシミュレートする実行中の WireMock インスタンスまたはメッセージングルートを取得できます。
これを行うには、次の例に示すように、依存関係を Spring Cloud Contract Stub Runner
に追加します。
Maven リポジトリにインストールされているプロデューサー側のスタブは、次の 2 つの方法のいずれかで取得できます。
Producer 側のリポジトリをチェックアウトし、次のコマンドを実行して契約を追加し、スタブを生成します。
$ cd local-http-server-repo $ ./mvnw clean install -DskipTests
プロデューサー側の契約実装がまだ整っていないため、テストがスキップされているため、自動生成された契約テストは失敗します。 |
リモートリポジトリから既存のプロデューサーサービススタブを取得することによって。これを行うには、次の例に示すように、スタブアーティファクト ID とアーティファクトリポジトリ URL を
Spring Cloud Contract Stub Runner
プロパティとして渡します。
これで、テストクラスに @AutoConfigureStubRunner
のアノテーションを付けることができます。次の例に示すように、アノテーションで Spring Cloud Contract Stub Runner
の group-id
値と artifact-id
値を指定して、コラボレーターのスタブを実行します。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests {
. . .
}
オンラインリポジトリからスタブをダウンロードする場合は REMOTE stubsMode を使用し、オフライン作業には LOCAL を使用します。 |
これで、統合テストで、コラボレーターサービスによって送信されると予想されるスタブバージョンの HTTP レスポンスまたはメッセージを受信できるようになりました。