【こんとらくとてすと】
コントラクトテスト とは?
最終更新:
💡 サービス間のやり取りの約束を、双方で確かめる
コントラクトテストは、サービスの利用側と提供側がやり取りの約束を満たすか、それぞれを分離して確認するテスト。Pactのモックと提供側の実検証、結合テストとの役割の違いを解説します。
📌 このページのポイント
- ConsumerとProviderが期待するリクエスト・レスポンスやメッセージを検証する
- PactのConsumer側はモックとの実際のやり取りから契約ファイルを生成する
- Provider側は実際の処理結果が契約を満たすか検証する
- 契約に含まれない業務フローや本番構成まで保証するテストではない
コントラクトテストって何を確かめるの?
Pactではどうやって契約を作るの?
Consumer側で、期待するリクエストと必要なレスポンスを定義し、Pactのモック提供者へ実際のコードからリクエストするよ。その応答を正しく扱えるかも確認する。テストが成功すると、やり取りを記述した契約ファイルを生成するんだ。
モックで成功すればProviderも正しい?
それだけでは分からないよ。Provider側の検証では契約に従ってリクエストを実際のProviderへ送り、返るレスポンスと比べる。必要なテストデータなどの状態も用意する。サービスを一切動かさずファイルだけを見るテスト、という意味ではないんだ。
APIを変える前に使える?
もっと詳しく知りたい人へ
APIの全項目を完全一致させる契約にすればよい?
Pactの契約では利用側が必要とする最小限のレスポンスなどを記述し、条件に合うかを検証します。利用していない項目や変わり得る値を不必要に固定すると、互換性を壊さない変更にもテストが反応します。実際の利用コードを通して必要な期待を記録し、エラー時など重要な相互作用も含めましょう。
まとめ:ざっくりこれだけ覚えればOK!
「コントラクトテスト」って出てきたら「サービス間の約束をそれぞれで検証するテスト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Contract Testing」 = 契約テスト
💬 Contractは取り決め。ここでは法的な契約ではなく、サービス間のメッセージに対する共有した期待を、テスト可能な形で扱う意味だよ。