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