通常、制御の反転と依存関係の挿入を使用してサービスを接続する場合、モッキングはうまく機能します。だからあなたの人は次のように見えるはずです
public class Person() {
WebService ws = null;
// or use setters instead of constructor injection
Persion(WebService ws) {
this.ws = ws;
}
public Person find(int id) {
return ws.getPersonById(id);
}
}
うまくいけば、この変更により、WebService のモックとモック コントロールを作成し、それをテストにプラグインすることができるようになったことは明らかです。これは、テストする Person を作成するときに、モックをコンストラクター (またはセッター) に渡すことができるためです。その道を行けば)。
実際の環境では、IoC コンテナーが実際の Web サービスを挿入します。
ここで、この IoC のすべてに対処したくない場合は、Web サービスを Person から分離する必要があります (エンティティを表す Person だけでなく、PersonService または何かを呼び出す必要があります)。つまり、コードの書き方では、1 種類の WebService しか使用できません。Personが、ハードコーディングした特定の WebService ではなく、ある種の WebServiceだけを必要とするようにする必要があります。
最後に、書かれているコードでは、WebService はインターフェイスではなくクラスです。WebService はインターフェイスである必要があり、何らかの実装を行う必要があります。EasyMock はインターフェイスでうまく機能します。具象クラスをモックできるかもしれませんが (実際に使用してからしばらく経ちました)、設計原則として、具象クラスではなく、必要なインターフェイスを指定する必要があります。