5

JERSEYプロジェクトの単体テストを書いています。

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

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

しかし、queryStringsを取得すると、モードには特別な引数があります(@Context UriInfo url)

ユニットテストでUriInfo引数を作成するにはどうすればよいですか?このクラスにコンストラクターがないのはなぜですか?

4

2 に答える 2

7

テストで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"));
于 2014-01-23T19:36:49.900 に答える
2

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内で実行せずにリソースを単体テストできます。

于 2013-05-17T08:59:42.020 に答える