0

コントラクト テストは、アプリケーション間のコントラクトをテストするために使用され、ビジネス機能のチェッカーとしては使用されないことを理解しています。ポジティブなシナリオとネガティブなシナリオの契約を 1 つずつ書きます。

しかし、次の例を想像してみてください。

// contract (#1)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/1'
  }
  response {
    status 200
    body([
        id: 1
        name: "Barbara"
        address: "Park Avenue 1"
    ])
  }
}


// contract (#2)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/9999'
  }
  response {
    status 404
    body([])
  }
}


// contract (#3)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/!^&(^%@'
  }
  response {
    status 400
    body([])
  }
}

私の肯定的なケースは、クライアントが見つかったときです (#1)。URL に変数を渡すことはできますか? これは SCC で可能ですか? ここで正規表現を使用して入力を検証できますか?

-- ユーザーが存在しない (#2)、 -- リクエストが無効である (#3) という 2 つの否定的なケースの必要性を感じました。

これは合理的ですか、それとも消費者主導の契約に関する要点を見逃していますか? これらの契約書に何か書いてくれますか?

プロデューサー側の推論にも問題があります。上記が何らかの理由で合理的である場合、プロデューサー側ではコントラクトの (自動生成された) テストがありますが、既存のクライアントと存在しないクライアントをどのように区別できますか? コントラクトが実際のデータを気にするのは意味がないことはわかっています...しかし、ユーザーが存在しない場合にコントラクトをテストする方法(#2)は?

4

1 に答える 1

1

これらは非常に良い質問です!! 一つ一つ答えていきたいと思います。

1 はい、変数と正規表現を渡すことができます。正規表現と具体的な値を持つ連絡先がある場合は、優先順位を使用して順序を定義する必要があります。

2 #3 コントラクトに入れずに、WireMock またはその他の http サーバー スタブを使用して手動で処理すると思います。さまざまな例外をシミュレートし、それらを確実に処理できるようにします。技術的な例外について話すとき。プロデューサー アプリがビジネス上の理由でエラーを送信できる場合は、連絡先を書くと思います。この場合、#2 はそのような例外であり、URL は存在するがクライアントが存在しないと思います。

プロデューサー側については... クライアントの名前を選んでください。たとえば、「存在しない」と 404 を返します。優先度を 1 に設定します。正規表現を使用して別のものを作成し、優先度を 5 または sth に設定します。

于 2017-04-28T16:08:02.080 に答える