2012-07-30 101 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