我正在尝试对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类型的请求创建相应的请求。有任何想法吗?除非绝对必要,否则我宁愿不必使用另一个测试框架库。
答案 0 :(得分:1)
您可以创建以下内容:
创建一个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容器......
答案 1 :(得分:0)
通过快速查看文档,似乎ServletUnitClient可以支持POST请求,以及具有KVP样式参数的GET请求,就像您现在使用的那样:http://httpunit.sourceforge.net/doc/tutorial/task1editor-form.html
使用XML的请求就像发布HTML表单一样,只是你不一定要在它前面有HTML用户界面。
但是,我可能会将XML解析的单元测试分解为单独的测试,而不是通过servlet显式测试它。 servlet充当XML解析和WFS服务的其他部分的HTTP前端,你应该单独测试这些部分(也许你已经这样做了,在这种情况下忽略这部分)。
根据我的经验,测试服务的HTTP /前端通常是最不重要的部分,它背后的逻辑更容易破坏,因此更重要的是测试。此外,与前端分开测试服务逻辑通常会迫使您使用更好的设计。
当然,如果你有时间,或者前端本身涉及很多逻辑,你也应该对该部分进行单元测试。