質問: Webサービス呼び出しを必要とするクラスを単体テストするにはどうすればよいですか? 私はいくつかのHadoop Webサービスを呼び出すクラスをテストしようとしています。コードはほとんど次のような形式です。 ``` method() { ...use Jersey client to create WebResource... ...make request... ...do something with response... } ``` 例えばディレクトリ作成方法、フォルダ作成方法などがあります。 コードが、私が制御できない外部Webサービスを扱っていることを考えると、どうすればこれを単体テストできますか?私はWebサービスのクライアント/応答をモックすることができましたが、それは私が最近見たガイドラインを壊します:「あなたが所有していないオブジェクトをモックしないでください」。ダミーのWebサービス実装をセットアップすることもできます。それでも「単体テスト」を構成するのでしょうか、それとも統合テストになるのでしょうか。この低いレベルで単体テストを行うことは不可能なのですか - TDDの専門家はどのようにこれに取り組むのでしょうか?
回答: 私の考えでは、統合テストとは対照的に、これが単体テストである場合は、Webサービス呼び出しを模擬する必要があります。 単体テストでは、外部Webサービスが機能しているかどうか、またはそれとの統合が正しいかどうかをテストしないでください。 TDDについてあまり批判的にならずに、単体テストを統合テストに変えることの副作用はそれがより遅く実行される可能性があることであり、あなたは*速い*単体テストを望んでいることに注意してください。 また、Webサービスが一時的に停止しているか、正しく機能していない場合、これで単体テストが失敗する可能性がありますか?正しくないようです。あなたのユニットテストはたった一つの理由で失敗するべきです:その "ユニット"のコードにバグがあるなら。 ここで関係のあるコードの唯一の部分は `...応答で何かをする...` です。残りを嘲笑しなさい。