如何将HttpServletRequest对象传递给测试用例?

时间:2012-07-30 12:30:24

标签: java unit-testing junit

现在我正在编写我的类的测试用例。我想将HttpServletRequest对象参数传递给我的测试用例方法,以检查方法是否正常工作。所以任何人都给我这个建议。

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

5 个答案:

答案 0 :(得分:37)

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

public void testCheckBatchExecutionSchedule() throws Exception
{
   MockHttpServletRequest request = new MockHttpServletRequest();
   request.addParameter("parameterName", "someValue");
   assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request));
}

答案 1 :(得分:12)

你应该使用模拟库来模拟请求对象,比如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));
}

答案 2 :(得分:7)

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

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

答案 3 :(得分:0)

2018年2月更新:OpenBrace Limited has closed down,不再支持其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的文档包括summary的属性和方法以及完全详细的Javadoc

请注意:

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

  • ObMimic的免费“社区版”可从网站的download页面获取。

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

  • ObMimic网站提供完整的文档,包括Getting Started指南,一组带有示例代码的How To指南,详细Javadoc等。

答案 4 :(得分:-2)

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

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

这会将最后一个请求传递给servlet,以便从当前线程进行维护。

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

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true