1

実装した Spring Bean を単体テストしようとしていますが、ここで問題が発生します。この Bean は、特定の場合にリモート REST サービスを呼び出すためのものです。

ただし、私のテストでは、リモート サーバーではなく、テスト コンテキストでモック サーブレットを呼び出したいと考えています。

呼び出しは Apache の httpclient ライブラリを使用して行われ、URL は applicationContext に設定されます (テスト時に任意の偽の URI を Bean に提供できます)。サービスはストリームを返す必要があります。

呼び出しは次のようになります。

HttpClient client = new DefaultHttpClient();
URIBuilder builder = new URIBuilder(theURIProvidedInContext);
// set parameters on builder
URI uri = builder.build();

HttpGet get = new HttpGet(uri);
HttpEntity entity = client.execute(get).getEntity();
return entity.getContent();

午前中ずっと Google を検索しましたが、サーブレットの単体テストの方法しか見つかりませんでした。ここで誰かが洞察を与えることができますか?

4

2 に答える 2

2

アプリケーション サーバーがないため、テスト コンテキストでモック サーブレットを呼び出すことはできません。代わりに、HTTP クライアントを使用して別の Bean に呼び出しを行うコードを引き出し、それをモックして目的のストリームを返すことができます。

REST サービスの場合は、JAX-RS アノテーション付きクラスをテスト ダブル (モックとは呼びません) として作成し、Grizzly や Jersey などの組み込みサーバーで開始できます。これにより、HTTP サーバーが起動します。注釈付きクラスは、テストの進行方法に応じて、404、500 などをスローできます。組み込みサーバーを使用した JAX-RS を参照してください。

于 2012-10-10T10:17:26.243 に答える
1

com.rexsl:rexsl-test:mock:0.3.8com.rexsl.test.ContainerMockerから試してください(私は開発者です):

URI home = new ContainerMocker()
  .expectMethod("GET")
  .expectHeader("Accept", Matchers.startsWith("text/"))
  .returnBody("<done/>")
  .returnStatus(200)
  .mock()
  .home();

これで、実行中の HTTP コンテナーを含む URI が作成されました。これをクラスに挿入できます。

于 2012-10-12T09:50:38.347 に答える