ジャージーHTTPクライアントリクエストをock笑するにはどうすればよいですか?
質問
これは私がテストしようとしているクラスです(HTTPページのサイズを計算します):
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.*;
public class Loader {
private Client client;
public Loader(Client c) {
this.client = c;
}
public Integer getLength(URI uri) throws Exception {
return c.resource(uri) // returns WebResource
.accept(MediaType.APPLICATION_XML) // returns WebResource.Builder
.get(String.class) // returns String
.length();
}
}
もちろん、それは単なる例であり、実際の解決策ではありません。今、私はこのクラスをテストしようとしています:
public class LoaderTest {
@Test public void shouldCalculateLength() throws Exception {
String mockPage = "test page"; // length is 9
Client mockedClient = /* ??? */;
Loader mockedLoader = new Loader(mockedClient);
assertEquals(
mockPage.length(),
mockedLoader.getLength(new URI("http://example.com"))
);
}
}
どのようにock笑するべきですか com.sun.jersey.api.client.Client
クラス?私はモキトを使用しようとしていますが、私はここの初心者なので、他のフレームワークは大丈夫です。
解決
あなたの例は本当に複雑で、私はジャージーの最新バージョンでそれを実行することができなかったので、私はそれらのクラスを作成しました。
String mockPage = "test page"; // length is 9
requestBuilder requestBuilderMock = creatEniceControl()。createMock(requestBuilder.class); expect(requestbuildermock.get((class <string>)anyobject()))。リプレイ(requestBuilderMock);
webresource webresourcemock = createnicecontrol()。createmock(webresource.class); expect(webresourcemock.accept((string [])anyobject()))。リプレイ(webresourcemock);
Client ClientMock = creatEniceControl()。createMock(client.class); expect(clientmock.resource((uri)anyobject()))。リプレイ(clientMock);
Loader MockedLoader = new Loader(clientMock); assertequals((integer)mockpage.length()、mockedloader.getLength(new URI( "http://example.com")));
あなたが模倣しようとしているクラスのいずれかがデフォルトのコンストラクターを持っていない場合、あなたは使用する必要がありますhttp://easymock.org/api/easymock/3.0/org/easymock/imockbuilder.html#withconstructor%28java.lang.class...%29
他のヒント
あなたの質問とはまったく関係ありませんが、後で役立つかもしれませんが、ジャージーのテストフレームワークです。ジャージーの貢献者の1人によるこれらのブログエントリをチェックしてください。
http://blogs.oracle.com/naresh/entry/jersey_test_framework_makes_it
http://blogs.oracle.com/naresh/entry/jersey_test_framework_re_visited
トピックに戻って、あなたをテストしてください Loader
クラスあなたはそれを単にaでインスタンス化することができます Client
から得られました Client.create()
. 。 Mavenを使用している場合は、ダミーテストエンドポイント(SRC/テスト/Java)を作成して呼び出し、Jersey Test FrameworkはJettyでロードされます。