JERSEYプロジェクトの単体テストを書いています。
クエリ文字列のないメソッドの場合、コントローラーをインスタンス化してメソッドを呼び出すだけです。
また、メソッドの文字列引数として表示されるため、パス内の引数に対しても機能します。
しかし、queryStringsを取得すると、モードには特別な引数があります(@Context UriInfo url)
ユニットテストでUriInfo引数を作成するにはどうすればよいですか?このクラスにコンストラクターがないのはなぜですか?
JERSEYプロジェクトの単体テストを書いています。
クエリ文字列のないメソッドの場合、コントローラーをインスタンス化してメソッドを呼び出すだけです。
また、メソッドの文字列引数として表示されるため、パス内の引数に対しても機能します。
しかし、queryStringsを取得すると、モードには特別な引数があります(@Context UriInfo url)
ユニットテストでUriInfo引数を作成するにはどうすればよいですか?このクラスにコンストラクターがないのはなぜですか?
テストで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"));
UriInfo
はインターフェイスであるため、オブジェクトを直接作成することはできません。UriInfo
それをサブクラス化し、独自のクラスを作成する必要があります。したがって、uriinfoクラスはString uri/urlをUriInfoオブジェクトに変換する必要があります。
public class UriInformation implements UriInfo {
MultivaluedMap<String, String> pathParamMap;
MultivaluedMap<String, String> queryParamMap;
public UriInformation(UriInfo uriInfo) {
//parse uriInfo
}
//setters/getters
}
したがって、このようにして、tomcat/server内で実行せずにリソースを単体テストできます。