当前位置: 首页 > 面试题库 >

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

谯德元
2023-03-14
问题内容

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

由于我正在测试并且未运行Tomcat,因此我没有活动的会话,并且得到了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不太了解,所以我需要一些帮助。我一直在看这个带有嵌入式tomcat例子的cumulage-
jvm,但我一直在努力理解。

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

因此,如何像用户正在使用应用程序一样运行验收测试?

更新:

感谢Steven Benitez的回答!

我必须做两件事:

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

这是我添加到cumul-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);
    }

}


问题答案:

An
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);

本示例仅提供您需要测试的方法。如果您需要根据此处未提供的代码在地图中添加其他条目,请相应地添加它们。

希望能有所帮助。



 类似资料:
  • 主要内容:验收测试背后的原因,执行验收测试的步骤,验收测试中使用的工具,验收测试的优点,验收测试的缺点验收测试是基于用户要求和功能处理的正式测试。它确定软件是否符合指定的要求和用户要求。它是作为一种黑盒测试进行的,其中涉及测试系统接受程度所需的用户数量。这是软件测试的第四级和最后一级。 但是,该软件已通过三个测试级别(单元测试,集成测试,系统测试)但仍有一些小错误,当最终用户在实际场景中使用系统时,可以识别这些错误。 验收测试是对先前完成的所有测试过程的挤压。 验收测试背后的原因 当软件经历了单

  • 验收测试从用户角度验证场景。 测试的应用程序可以通过 PhpBrowser 或者 真正的浏览器。 在这两种情况下,浏览器都通过 HTTP 进行通信,因此应用程序应通过Web服务器提供。 验证测试是在 Codeception 框架的帮助下实现的,该框架有一个很好的文档: Codeception for Yii framework Codeception Acceptance Tests 运行基本和高

  • 问题内容: 如何从Python中的日期时间对象获取日期名称(例如星期一,星期二,星期三,星期四,星期五,星期六和星期日)? 因此,例如,应该给我。 问题答案: 有关datetime.now,datetime.strftime以及有关strftime的更多信息,请参见Python文档。

  • 以下测验提供了与Struts2 Framework相关的多项选择题(MCQ)。 您必须阅读所有给定的答案并单击正确的答案。 如果您不确定答案,则可以使用“ Show Answer按钮Show Answer 。 您可以使用“ Next Quiz按钮在Next Quiz中检查新的问题集。 问题1 - Struts 2中存在以下哪个特性? A - POJO表单和POJO操作 B - 标签支持 C - A

  • 背景资料 我试图帮助我的团队组织一个新的移动应用程序项目。我们选择遵循BDD(另请参见BDD定义),以捕获简单的英语需求,这些需求在涉众和开发人员之间形成了针对每个用户故事的合同。 我们使用验收测试来记录每个用户故事的需求。验收测试是在冲刺计划之前编写的。开发人员在冲刺计划期间改进并添加到测试中。 我们将验收标准定义为规则列表(例如:输入验证、默认值等),验收测试定义为cucumber场景列表。我

  • 问题内容: 我从ResultSet获取Date对象时遇到问题。在数据库中,它具有一个值(例如2014-08-01),并且从resultSet获取它之后,它具有另一个值(2014-08-31)。我知道ResultSet的getDate方法返回java.sql.Date,但是我尝试了一些解决方案,例如: 或 但问题是相同的。如果尝试 ,则抛出NullPointerException。 有人可以解释吗?