サードパーティの Web サービスを呼び出す Web サービスがあります。
次に、Web サービスの単体テストを行います。このために、サード パーティの Web サービスをモックする必要がありますか、それともテスト中に呼び出しても問題ありませんか?
単体テストに関する標準ドキュメントはありますか?
サードパーティの Web サービスを呼び出す Web サービスがあります。
次に、Web サービスの単体テストを行います。このために、サード パーティの Web サービスをモックする必要がありますか、それともテスト中に呼び出しても問題ありませんか?
単体テストに関する標準ドキュメントはありますか?
はい、ユニット テスト用にサード パーティの Web サービスをモックする必要があります。以下にいくつかの利点を示します。
単体テストは他のコンポーネントから独立しており、実際には単体のみをテストし、Web サービスもテストしません。単体テストにサービスを含めて失敗した場合、問題がコードにあるのか、外部 Web サービスにあるのかわかりません。
テストは環境に依存しません。インターネット接続がダウンしたり、インターネットにまったくアクセスできないマシンでテストしたい場合でも、テストは機能します。
実際に Web サービスに接続しなくても、テストははるかに 高速になります。これは大したことではないように思えるかもしれませんが、テストがたくさんある場合 (そうするべきです)、本当に煩わしくなります。
モックに予期しないものを送信させることで、ユニットの堅牢性をテストすることもできます。これは現実の世界では常に発生する可能性があり、発生した場合、Web サービスは適切に反応し、クラッシュするだけではありません。実際の Web サービスを使用する場合、それをテストする方法はありません。
ただし、統合テストもあります。そこで、すべてのコンポーネントをまとめて (統合)、完全なセットアップをテストします。これは、モックの代わりに実際の Web サービスを使用する場所です。
どちらの種類のテストも重要ですが、単体テストは通常、より早く、より頻繁に行われます。これは、システムのすべてのコンポーネントが作成される前に行うことができます (また行う必要があります)。統合テストでは、ほとんどのコンポーネントのすべてで最小限の進行状況が必要です。
これは、単体テストの内容によって異なります。
したがって、サードパーティの Web サービスと正常に通信できるかどうかをテストしている場合は、明らかにこれをモックしようとはしません。ただし、Web サービス オファリングの一部である (他のモジュール/Web サービスが行っていることとは無関係な) ビジネス ユースケースの単体テストを行っている場合は、サード パーティの Web サービスをモックすることをお勧めします。
両方をテストする必要がありますが、両方のテスト ケースは単体テストには該当しません。
単体テストは主に、個々の小さな部分、つまりクラスとメソッドをテストするために使用されます。単体テストは、人間の介入なしでビルド プロセス中に行うことが望ましいものです。そのため、単体テストの一環として、サード パーティの Web サービスをモック アウトする必要があります。モック化の利点は、モック化されたオブジェクトをさまざまな方法で動作させ、クラス/メソッドをテストして、考えられるすべてのケースを確実に処理できることです。
複数のシステムが関与する場合、テスト ケースはシステム/統合/機能テストに分類されます。したがって、システム/統合/機能テストの一環として、Web サービスから他の Web サービスのメソッドを呼び出し、すべてが期待どおりに機能することを確認する必要があります。
モッキングは通常、依存コンポーネントを持つコンポーネントの単体テストに不可欠です。これは、単体テストでは、コードが正しく機能することをテストすることに限定されているためです (その契約が行うと述べていることを行います)。このメソッドが、コントラクトの一部を実行しようとする際に、その部分を正しく実行している他のコンポーネントに依存している場合、その部分をモックすることはまったく問題ありません (それらが正しく機能することを前提としています)。
他の依存部分をモックしないと、すぐに問題が発生します。第 1 に、そのコンポーネントがどのような動作をするかを特定できません。第 2 に、自分のテストの結果を予測することはできません (テストに提供された入力が何であったかがわからないため)。