最近、同僚と私はJavaプロジェクトの統合テストを書いています。これらの統合テストのほとんどは、少なくとも1つのSOAP Webサービス呼び出し、LDAPクエリ、または必ずしも制御できないエンドポイントに依存するその他のものを必要とします。これらのSOAP/LDAP呼び出しの一部は、まだ開発中のlibsを使用します。
これが意味することは、マシンがダウンしたり、ライブラリが変更されたり、エンドポイントが変更されたりしたときに、ビルド中に統合テストが失敗することがあるということです。いくつかの調査を行った後、統合テストでライブエンドポイントを使用することがかなり一般的であることに気付きましたが、ライブエンドポイントの使用が有害である理由についての記事も見つけました(http://martinfowler.com/articles/nonDeterminism.html #RemoteServices)。
統合テストを作成するときに、すべてのエンドポイントをモックするのか、ライブエンドポイントを使用するのか、どちらがより理にかなっているのでしょうか。特に信頼性が低い場合にライブエンドポイントを使用すると、テストが非決定的になるようです。ただし、モックはこれまでのところしか理解できないようであり、本番環境のような環境で何が起こるかをテストすることはできません。純粋なモックで構成された統合テストは、回帰以外のものを検証するのに役立ちますか?