2012-07-30 119 views
7

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

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

回答

4

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

HttpServletRequestWrapper的问题在于它仍然需要将另一个HttpServletRequest传递给其构造函数以充当每个方法的默认行为。通过null的结果为NullPointerException

-1

通过使用由tomcat的给定的API,你可以得到HttpServletRequest对象

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

这将让传给一个servlet从当前线程服务的最后一个请求。

此工作仅限于Tomcat“严格Servlet合规性”模式。要启用它添加以下JVM参数:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
10

你应该模拟出用讽刺库请求对象,像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)); 
} 
22

Spring提供了一个所谓的MockHttpServletRequest类,它可以被用来测试代码需要一个HttpServletRequest。

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

我发现其他的嘲笑,这是只有一个包含与原始类相似的逻辑。例如,'getRequestURL()'实际上是从其他属性组装一个URL,而不仅仅是反复修改'setRequestURL()'或者构造函数指定的内容。 – 2016-06-30 20:56:16

0

更新于2018年2月:OpenBrace Limited has closed down,其ObMimic产品不再受支持。

您还可以使用ObMimic库Servlet API的测试双打:

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