gpt4 book ai didi

java - 由于资源方法内部的 session ,Jersey 休息测试失败

转载 作者:行者123 更新时间:2023-12-01 09:54:36 25 4
gpt4 key购买 nike

我有 Jersey Rest api,但是当我尝试测试它时,它失败了,因为我在那里获取 session 数据,所以问题是,我如何模拟或忽略这个 Jersey 无法检测到的 session 变量?

这是我的测试的请求:

User response = target("/am/users/" + userId).request().get(new GenericType<User>() { });

这是我的资源:

@GET
@Path("{userId}")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public User getUser(@PathParam("userId") String userId, @Context HttpServletRequest request) {
User supportUser = (User)request.getSession().getAttribute("USER"); // Here is where it fails.
User user = userDao.getUser(userId, supportUser);
return user;
}

最佳答案

问题是 Jersey 测试没有在 servlet 环境中运行,而这是使用 servlet API 所必需的。如果您不知道,Jersey 不需要在 servlet 容器内运行。如果使用provider-grizzly2的情况,如果您不设置测试容器,它将默认运行 GrizzlyTestContainerFactory,它仅启动 Grizzly 和 HTTP 服务器,而不启动 servlet 容器。

为了将 JerseyTest 配置为 servlet 容器,我们需要重写另外两个方法:configurDeploymentgetTestContainerFactory。对于后者,我们需要返回 GrizzlyWebTestContainerFactory,它将设置 servlet 容器。在 configureDeployment 方法中,我们可以在 servlet 级别配置应用程序。

public class ServletTest extends 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提供程序。

关于java - 由于资源方法内部的 session ,Jersey 休息测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com