我正在使用Jersey客户端对我的服务运行一些集成测试。但是,我的一个电话会发送重定向。我希望得到一个重定向但是当Jersey Client获得重定向时,它会出现com.sun.jersey.api.client.UniformInterfaceException错误。有没有办法让它接受重定向的响应,让我知道它得到了什么?
答案 0 :(得分: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;
}
}
另请注意,以下重定向(在setUp方法中)应设置为false,以便获取UniformInterfaceException而不是跟随重定向(如果在Location标头中指定了一个)。