Jersey クライアントを使用して、サービスに対していくつかの統合テストを実行しています。ただし、私の呼び出しの 1 つがリダイレクトを送信します。リダイレクトを取得することを期待していますが、Jersey Client がリダイレクトを取得すると、com.sun.jersey.api.client.UniformInterfaceException でエラーが発生します。リダイレクトで応答を受け入れ、何が得られたかを知らせる方法はありますか?
1838 次
1 に答える
1
すべての詳細を含む応答フィールドを提供する UniformInterfaceException をキャッチできます。
hamcrest マッチャーを追加して、期待を表現することもできます。
import static javax.ws.rs.core.Response.Status.*;
import static org.junit.rules.ExpectedException.*;
import javax.ws.rs.core.Response.Status;
import org.hamcrest.*;
import org.junit.*;
import org.junit.rules.ExpectedException;
import com.sun.jersey.api.client.*;
public class MyResourceShould {
@Rule
public ExpectedException unsuccessfulResponse = none();
private WebResource resource;
@Before
public void setUp() {
Client client = Client.create();
client.setFollowRedirects(false);
resource = client.resource("http://example.com");
}
@Test
public void reportMovedPermanently() {
unsuccessfulResponse.expect(statusCode(MOVED_PERMANENTLY));
resource.path("redirecting").get(String.class);
}
public static Matcher<UniformInterfaceException> statusCode(Status status) {
return new UniformInterfaceExceptionResponseStatusMatcher(status);
}
}
class UniformInterfaceExceptionResponseStatusMatcher extends TypeSafeMatcher<UniformInterfaceException> {
private final int statusCode;
public UniformInterfaceExceptionResponseStatusMatcher(Status status) {
this.statusCode = status.getStatusCode();
}
public void describeTo(Description description) {
description.appendText("response with status ").appendValue(statusCode);
}
@Override
protected boolean matchesSafely(UniformInterfaceException exception) {
return exception.getResponse().getStatus() == statusCode;
}
}
また、リダイレクトに従う (場所ヘッダーで指定されている場合) の代わりに、UniformInterfaceException を取得するには、リダイレクトに従う (setUp メソッド内) を false に設定する必要があることに注意してください。
于 2013-07-12T10:42:21.217 に答える