簡體   English   中英

如何使用僅包含xml內容的請求對servlet進行單元測試

[英]How can I unit test a servlet with a request that just consists of xml content

我正在嘗試對Java WFS Web服務實現進行單元測試。 該服務可以接受包含KVP參數的請求,例如: http : //www.someserver.com/wfs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&TYPENAME=InWaterA_1M

或者它也可以接受包含XML片段的請求,例如

<?xml version="1.0" ?> 
  <GetFeature  version="1.1.0" service="WFS" maxFeatures="10000" 
       xmlns="http://www.opengis.net/wfs" 
       xmlns:myns="http://www.someserver.com/myns" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.1.0/WFS.xsd"> 
    <Query typeName="myns:InWaterA_1M"/> 
  </GetFeature>

我正在使用ServletUnit測試KVP方式,這很簡單:

 ServletUnitClient sc = servletRunner.newClient();
 WebRequest request = new PostMethodWebRequest( "http://www.someserver.com/wfs
 request.setParameter( "SERVICE", "WFS );
 ...
 request.setParameter( "TYPENAME" "InWaterA_1M" ); 
 sc.getResponse( request);

我無法弄清楚如何為XML類型的請求創建相應的請求。 有任何想法嗎? 除非絕對必要,否則我不必使用其他測試框架庫。

您可以創建一個執行以下操作:

  1. 創建所需的請求的XML。
  2. 創建一個MockHttpServletRequest API: http ://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mock/web/MockHttpServletRequest.html

  3. 調用setContent(xml); setContentType("text/xml");

  4. 直接調用您的servlet方法。 例如someServlet(mockReq,mockRes) ;

這樣,在進行jUnit測試時就無需啟動servlet容器。

快速瀏覽一下文檔,似乎ServletUnitClient可以支持POST請求以及帶有KVP樣式參數的GET請求,就像您現在使用的那樣: http : //httpunit.sourceforge.net/doc/tutorial/task1editor-form .html

使用XML進行請求就像發布HTML表單一樣,只是您不必在其前面放置HTML UI。

但是,我可能會將XML解析的單元測試分解為單獨的測試,而不是通過servlet對其進行顯式測試。 Servlet充當XML解析和WFS服務其他部分的HTTP前端,因此您應該分別對這些部分進行單元測試(也許您已經這樣做了,在這種情況下可以忽略此部分)。

以我的經驗,測試服務的HTTP /前端通常是最不重要的部分,其背后的邏輯更有可能被破壞,因此測試更為重要。 另外,與前端分開測試服務邏輯通常會迫使您使用更好的設計。

當然,如果您需要時間,或者前端本身涉及很多邏輯,那么您也應該對該部分進行單元測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM