あなたのウェブサイトがいくつかのタスクを実行するためにTwitterAPIを呼び出す必要があるとしましょう、あなたにはいくつかのオプションがあります:
- モックのみを使用してください
- 単体テストではモックを使用しますが、統合テストでは本番APIを使用します
- 本番APIを呼び出すだけで、モックは使用しないでください
サービスが外部APIに依存している場合、どちらが最善のアプローチですか?
あなたのウェブサイトがいくつかのタスクを実行するためにTwitterAPIを呼び出す必要があるとしましょう、あなたにはいくつかのオプションがあります:
サービスが外部APIに依存している場合、どちらが最善のアプローチですか?
私は一歩下がって、あなたが何をテストしようとしているのかを自問します。
他のコードを単独でテストしようとしている場合は、モックを使用します(これがモックの目的です)。
実際にエンドツーエンドでテストしようとしている場合は、本番API(または、ライブテストAPIがある場合はライブテストAPI)を使用してください。
したがって、私の答えはあなたの#2の選択にかなり近いものですが、サードパーティのAPIをテストする必要があるかどうかを検討する必要があるという警告があります。そうすることが理にかなっている場合や必要な場合もあれば、意味がない場合もあります(信頼できることがわかっているか、非常に不便です)。
2番目が最善の解決策だと思います。単体テストではモックを使用し、機能テストでは本番APIを使用します。単体テストでリモートAPIを使用したくないのは、リモートAPIを高速に実行し、そのAPIの結果(および接続)をテストしていないためですが、APIが変更された場合、またはAPIを使用している場合は、Jenkinsが失敗するようにします。接続の問題など
Mockを使用する利点の1つは、「ネガティブテスト」、たとえば、APIから返された特定のエラー条件にコードがどのように応答するかです。Mockを使用すると、「到達可能な」コードを100%テストできますが、実際のAPI(特に組織の外部に提供されているAPI)を使用すると問題が発生します。