我想用这个声明来测试一个方法:
@GET
@Path("/hello")
public Response myMethod(@Context HttpServletRequest requestContext,
@QueryParam("key") String value){...}
Response output = target("/hello/myMethod")
.queryParam("key", "value")
.request().get();
但我得到500,内部服务器错误,我知道这是因为我的方法的第一个参数(@Context HttpServletRequest requestContext)但我不知道如何解决它。
答案 0 :(得分:0)
问题是Jersey测试没有在servlet环境中运行,这是使用servlet API所必需的。如果您不知道,Jersey不需要在servlet容器内运行。如果使用provider-grizzly2的情况,如果你没有设置测试容器,它将默认运行GrizzlyTestContainerFactory,它只启动Grizzly和HTTP服务器,而不是servlet容器。
为了将JerseyTest配置为servlet容器,我们需要覆盖另外两个方法,configurDeployment和getTestContainerFactory。对于后者,我们需要返回GrizzlyWebTestContainerFactory,它将设置servlet容器。在configureDeployment方法中,我们可以在servlet级别配置应用程序。
public class ServletTest扩展了JersyTest {
@Override
public ResourceConfig configure() {
// configure Jersey
}
@Override
public TestContainerFactory getTestContainerFactory() {
return new GrizzlyWebTestContainerFactory();
}
@Override
public DeploymentContext configureDeployment() {
return ServletDeploymentContext
.forServlet(new ServletContainer(configure()))
.build();
}
}
如果您使用的是provider-inmemory,它不支持servlet部署,因此您需要切换到jetty提供程序或者grizzly提供程序。