gpt4 book ai didi

java - 如何在验收测试期间从 Struts 2 获取 ActionContext?

转载 作者:搜寻专家 更新时间:2023-11-01 03:24:42 25 4
gpt4 key购买 nike

我正在使用 cucumber-jvm 在一个以 Struts 2 和 Tomcat 作为我的 Servlet 容器的应用程序上编写验收测试(测试行为)。在我的代码中的某个时刻,我需要从 Struts 2 HttpSession 获取用户,该用户由 HttpServletRequest 创建。

因为我正在做测试而不是运行 Tomcat,所以我没有 Activity 的 session 并且我得到一个 NullPointerException

这是我需要调用的代码:

public final static getActiveUser() {
return (User) getSession().getAttribute("ACTIVE_USER");
}

和 getSession 方法:

public final static HttpSession getSession() {
final HttpServletRequest request (HttpServletRequest)ActionContext.
getContext().get(StrutsStatics.HTTP_REQUEST);
return request.getSession();
}

老实说,我对 Struts 2 了解不多,所以我需要一点帮助。我一直在看这个 cucumber-jvm with embedded tomcat例如,但我很难理解。

我也一直在看这个 Struts 2 Junit Tutorial .可悲的是,它没有很好地涵盖所有 StrutsTestCase 功能,而且它是最简单的用例(所有考虑,一个非常无用的教程)。

那么,我如何才能像用户正在使用应用程序一样运行我的验收测试?


更新:

感谢 Steven Benitez 的回答!

我必须做两件事:

  1. 按照建议模拟 HttpServletRequest,
  2. 模拟 HttpSession 以获得我想要的属性。

这是我添加到 cucumber-jvm 测试中的代码:

public class StepDefs {
User user;
HttpServletRequest request;
HttpSession session;

@Before
public void prepareTests() {
// create a user

// mock the session using mockito
session = Mockito.mock(HttpSession.class);
Mockito.when(session.getAttribute("ACTIVE_USER").thenReturn(user);

// mock the HttpServletRequest
request = Mockito.mock(HttpServletRequest);
Mockito.when(request.getSession()).thenReturn(session);

// set the context
Map<String, Object> contextMap = new HashMap<String, Object>();
contextMap.put(StrutsStatics.HTTP_REQUEST, request);
ActionContext.setContext(new ActionContext(contextMap));
}

@After
public void destroyTests() {
user = null;
request = null;
session = null;
ActionContext.setContext(null);
}

最佳答案

ActionContext 是一个每个请求的对象,表示执行操作的上下文。静态方法 getContext()setContext(ActionContext context)ThreadLocal 支持。在这种情况下,您可以在测试前调用它:

Map<String, Object> contextMap = new HashMap<String, Object>();
contextMap.put(StrutsStatics.HTTP_REQUEST, yourMockHttpServletRequest);
ActionContext.setContext(new ActionContext(contextMap));

然后用以下方法清理它:

ActionContext.setContext(null);

此示例将仅提供您正在测试的方法所需的内容。如果您需要根据此处未提供的代码在 map 中添加其他条目,则只需相应地添加它们即可。

希望对您有所帮助。

关于java - 如何在验收测试期间从 Struts 2 获取 ActionContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17724340/

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