制御の反転原則 ( http://en.wikipedia.org/wiki/Inversion_of_control ) を読む必要があることは明らかです。コードをより適切に設計するためではない場合は、単体テストのために。上記のメソッドのクライアント オブジェクトは、静的ファクトリ メソッド Client.create() を使用して、メソッド自体の内部で作成されます。そのアプローチで模擬コラボレーターを注入する良い方法はありません。セッターまたはコンストラクターを介してクライアントの注入を許可するか、その作成を何らかのファクトリーに委譲する必要があります。
最初のアプローチを使用する場合、単体テストのセットアップ中にセッターまたはコンストラクターを介してモック クライアントを直接注入できます。
2 番目のアプローチを使用する場合は、呼び出されたときにモック クライアントを返すファクトリを提供できます。
編集 5/03:
サードパーティ ライブラリ オブジェクトのオブジェクト ファクトリを提供することで、コードをテスト可能にする例を次に示します。
public class ClassToTest {
private ClientFactory factory;
public ClassTotest() {
this(new ClientFactory());
}
public ClassToTest(ClientFactory factory) {
this.factory = factory;
}
public void connect() {
Client client = factory.getClient();
WebResource jobBuilder = client.resource("URL");
String jobXml = jobBuilder.accept(MediaType.APPLICATION_XML)
.type(MediaType.APPLICATION_JSON)
.entity(request)
.post(String.class);
}
}
public class ClientFactory() {
public Client getClient() {
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(cc);
return client;
}
}
これで、アプリケーション コードで、引数なしのコンストラクターを使用してクラスをインスタンス化できます。単体テストでは、他のコンストラクターを使用します。このようにして、WebResource をテストする目的でスクリプトを作成するモック クライアントを挿入できます。
お役に立てれば。