2013-03-09 5 views
5

JERSEYプロジェクトの単体テストを書いています。UriInfoでJERSEYコントローラメソッドをテストする方法

クエリ文字列がないメソッドの場合、コントローラをインスタンス化してメソッドを呼び出すことができます。

また、メソッドの文字列引数として表示されるため、パスの引数としても機能します。

しかし、私はクエリ文字列を取得するときのモードでは、私は私のユニットテストでUriInfo引数を構築することができますどのように特別な引数(@Context UriInfo url)

を持っていますか? なぜこのクラスにコンストラクタがないのですか?

+2

コンテナの外部ジャージーリソースをテストするために非常に珍しい。その、および種類の逆を。うまくいかないものはありますか?コンテナが注入したリソース、パスの解釈、パラメータの抽出、サブリソースのロケータなど。本当にJAX-RSリソースクラスをテストする場合は、***クライアント***側から行う必要があります。 – Perception

+0

私はtomcatコンテナでいくつかのテストを実行することもできますが、実行中のコードカバレッジ解析のデバッグユニットテストに関しても実行できます。これらは2つのプロセスに分かれているので、私は完全に盲目です。 –

+0

アプリケーションをデプロイしてスタンドアロンのTomcatを実行する場合、クライアントライブラリを使用してリソースをテストするjUnitテストのスーツを実行できます。 JerseyのクライアントライブラリやApache HttpComponentsを使って、これらのテストを作成することができます。 – Perception

答えて

2

UriInfoはインターフェイスなので、オブジェクトを直接作成することはできません。サブクラス化して独自のUriInfoクラスを作成する必要があります。したがって、あなたのuriinfoクラスは、String uri/urlをUriInfoオブジェクトに変換する必要があります。

このように、リソースをtomcat/server内で実行しなくても、ユニットテストを行うことができます。

6

あなたのテストでMockitoを使用している場合は、代わりにUriInfoをモックできます

import java.net.URI; 
import javax.ws.rs.core.UriInfo; 

UriInfo mockUriInfo = mock(UriInfo.class); 
when(mockUriInfo.getRequestUri()).thenReturn(new URI("http://www.test.com/go")); 
+0

ここではどのURIクラスを使用しましたか? – k4sia

+1

私は上記のインポートをチェックして追加しました。これはJava 7にあります.... –

関連する問題