私はJerseyクライアントAPIを呼び出すコードを作成しました。このAPIは、自分の制御できないWebサービスを呼び出します。単体テストで実際のWebサービスを呼び出さないようにします。
ジャージークライアントAPIを呼び出すコードの単体テストを作成するための最良のアプローチは何ですか?ジャージーサーバーAPIを使用してJAX-RSWebサービスを作成してから、単体テストにジャージーテストフレームワークを使用する必要がありますか?または、Jersey Webサービスの呼び出しをモックアウトする必要がありますか?JMockにアクセスできます。または、別のアプローチを試す必要がありますか?
調査中に、さまざまなオプションについて説明しているこのディスカッションを見つけましたが、完全な解決策を見つけました。提案されたJUnitアプローチを示す利用可能なコード例はありますか?ジャージーのドキュメントには何も見つかりませんでした。
関連するソースコードは次のとおりです。
public String getResult(URI uri) throws Exception {
// error handling code removed for clarity
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource service = client.resource(uri);
String result = service.accept(accept).get(String.class);
return result;
}
これが私が合格したいテストコードの例です。(1)有効なURIを渡して有効な文字列を取得し、(2)無効な(何らかの理由で-到達不能または無許可の)URIを渡して例外を取得することをテストしたいと思います。
@Test
public void testGetResult_ValidUri() throws Exception {
String xml = retriever.getResult(VALID_URI);
Assert.assertFalse(StringUtils.isBlank(xml));
}
@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
retriever.getResult(INVALID_URI);
}
上記のすべては、私のコードが何をするかについての簡単な説明です。実際には、その上に2つのURIを受け入れるレイヤーがあり、最初に最初のURIを呼び出そうとし、そのURIが失敗した場合は、2番目のURIを呼び出そうとします。(1)最初のURIが成功し、(2)最初のURIが失敗し、2番目のURIが成功し、(3)両方のURIが失敗する単体テストが必要です。このコードは十分に複雑なので、JUnitを使用してこれらのさまざまなシナリオをテストしたいのですが、これを行うには、実際のスタンドインWebサービスを実行するか、JerseyクライアントAPI呼び出しをモックアウトする必要があります。