33

现在我正在编写我班级的测试用例。我想将 HttpServletRequest 对象参数传递给我的测试用例方法以检查该方法是否有效。所以任何人都给我建议。

public void testCheckBatchExecutionSchedule() throws Exception
    {
        assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request));
    }
4

5 回答 5

72

Spring 提供了一个名为MockHttpServletRequest的类,可用于测试需要 HttpServletRequest 的代码。

public void testCheckBatchExecutionSchedule() throws Exception
{
   MockHttpServletRequest request = new MockHttpServletRequest();
   request.addParameter("parameterName", "someValue");
   assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request));
}
于 2012-07-31T01:06:02.763 回答
22

您应该使用模拟库模拟请求对象,例如http://code.google.com/p/mockito/

public void testCheckBatchExecutionSchedule() throws Exception
{
   HttpServletRequest mockRequest = mock(HttpServletRequest.class);
   //setup the behaviour here (or do it in setup method or something)
   when(mockRequest.getParameter("parameterName")).thenReturn("someValue");
   assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(mockRequest));
}
于 2012-07-30T12:57:30.450 回答
7

HttpServletRequest是一个接口。过去,我只是简单地创建了一个类(例如TestHttpServletRequest),其中的每个方法都有一个空的方法体HttpServletRequest,除了我实际需要的方法。对于大多数方法,我返回了一个实例变量并为该实例变量包含了一个 setter,以便测试用例可以定义要返回的内容。 HttpServletRequest有很多方法,但大多数 IDE(我使用 Eclipse)都可以生成方法存根。

问题HttpServletRequestWrapper在于它仍然需要HttpServletRequest将另一个传递到其构造函数中,以作为每个方法的默认行为。在 a 中传递null结果NullPointerException

于 2012-07-30T12:38:58.917 回答
0

2018 年 2 月更新:OpenBrace Limited 已关闭,不再支持其 ObMimic 产品。

您还可以使用 Servlet API 测试替身的ObMimic库:

import com.openbrace.obmimic.mimic.servlet.http.HttpServletRequestMimic;

public void testCheckBatchExecutionSchedule() throws Exception
{
   HttpServletRequestMimic request = new HttpServletRequestMimic();
   // Configure the request as necessary...
   // e.g. request.getMimicState().getRequestParameters().set("name", "value");
   assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request));
}

要配置请求,HttpServletRequestMimic 有一个 getMimicState() 方法,该方法返回一个 HttpServletRequestState,通过该方法可以配置请求的所有相关详细信息(您可以通过该方法访问任何关联的 ServletContext、HttpSession 等,并在必要时进行类似的配置)。HttpServletRequestState 的文档包括其属性和方法的摘要以及完全详细的Javadoc

注意:

  • ObMimic 还为 HttpServletResponse、ServletContext、HttpSession、ServletConfig 等提供了类似的“模仿”类。

  • ObMimic 的免费“社区版”可从网站的下载页面获得。

  • 为此,您需要添加到项目中的唯一库是 ObMimic 的 /lib/obmimic.jar(假设 Servlet API 本身已经存在)。

  • ObMimic网站提供了完整的文档,包括入门指南、一组带有示例代码的操作指南、详细Javadoc

于 2013-11-13T14:21:36.897 回答
-3

通过使用 tomcat 提供的 API,您可以获得 HttpServletRequest 对象

HttpServletRequest request = (HttpServletRequest)org.apache.catalina.core.ApplicationFilterChain.getLastServicedRequest();

这将获取传递给 servlet 以从当前线程提供服务的最后一个请求。

这项工作仅在 Tomcat 的“Strict Servlet Compliance”模式下工作。要启用它,请添加以下 JVM 参数:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
于 2012-07-30T12:39:10.040 回答