我有网络服务的球衣实施。每个要求的响应必须是gzip-ed。
客户端包含以下用于切换gzip的引导代码:
Client retval = Client.create();
retval.addFilter(
new com.sun.jersey.api.client.filter.GZIPContentEncodingFilter());
对于Tomcat web.xml,gzip配置如下
<servlet>
<display-name>JAX-RS REST Servlet</display-name>
<servlet-name>JAX-RS REST Servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
一切正常!
但是我需要写单元测试来调用我的服务。我使用JerseyTest作为基础,并且在实践中表明,如果没有明确的声明,灰熊不能正确处理gzip。我找到了如何在similar problem上切换它的代码段,但我不知道如何将它与JerseyTest结合使用。
提前谢谢
答案 0 :(得分:1)
如果你正在使用球衣测试Framwork:
,这是一个示例测试用例@Test
public void testGet(){
WebResource webResource = resource();
ClientResponse result = webResource
.path("pathToResource")
.header("Accept-Encoding", "gzip")
.head();
assertEquals(
"response header must contain gzip encoding",
"[gzip]",
result.getHeaders().get("Content-Encoding").toString());
}
答案 1 :(得分:0)
如果在当前的Jersey版本中更改了客户端API,这是一个与Jersey 2.6一起使用的示例测试:
public class WebServicesCompressionTest extends JerseyTest {
@Path("/")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}
@Override
protected Application configure() {
enable(TestProperties.LOG_TRAFFIC);
return new ResourceConfig(
HelloResource.class,
EncodingFilter.class,
GZipEncoder.class,
DeflateEncoder.class
);
}
@Test
public void testGzip() {
Response response = target().request().acceptEncoding("gzip").get(Response.class);
assertThat(response.getStatus(), is(200));
assertThat(response.getHeaderString("Content-encoding"), is("gzip"));
}
}