Pactのサンプルを動かしてみた

Constomr-Driven Contract PatternのPactのexampleを実施して動きを観察してみました。

GitHub: https://github.com/realestate-com-au/pact

対象

example/animal-service # service providerに対するテスト
example/zoo-app # service customerに対するテスト

zoo-app

zoo-app配下で、以下のコマンドを入力します。

$ bundle install
$ bundle exec rake spec

MockServerがService Providerの役割を担います。
Service Customerである ZooApp::AnimalServiceClient がテスト対象です。

ここのテストでは、CustomerがProviderに対して成立させたい機能のリクエストを送り、それに対してProviderが成功/失敗の応答を行うという振る舞いにたいしてexpectで結果を検証します。

Contractフェイズにおける、Customer => Providerへ使いたいサービスの契約を実施しようとするときのもののようです。

animal-service

animal-service配下で以下のコマンドを入力します。

$ bundle install
$ bundle exec rake pact:verify

Service Providerに対するテストなので、ProviderにConsumerに対するテストデータを保存しておき、Providerに対するリクエストに対して正しく応答ができるか、をテストしています。

そのため、想定したHTTPリクエストが正しく行われているか、が主なテストの合否判定になりますね。

締め

Customer-Driven Contracts Pattern自体、サービス間の関係性を確認するためのパターンです。そこに限ってテストを実施するのであれば関係性を確認するときのやりとりをテストすることに限定されそう。

Consumer-Driven Contractsを採用するのであれば、この関係性が破綻しないように正しくすることは必須要素なので、これのようなシンプルさがあったほうが良さそう。

なるほど。

以下のpactoも、振る舞いとしては同じことを確認しようとしてそうです。テストダブルとか、そこらへんの機能は必要性が増えたら見てみようと思います。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s