[英]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類型的請求創建相應的請求。 有任何想法嗎? 除非絕對必要,否則我不必使用其他測試框架庫。
您可以創建一個執行以下操作:
創建一個MockHttpServletRequest API: http ://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mock/web/MockHttpServletRequest.html
調用setContent(xml);
和setContentType("text/xml");
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.