1

我正在尝试对 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 类型的请求创建相应的请求。有任何想法吗?除非绝对必要,否则我宁愿不必使用另一个测试框架库。

4

2 回答 2

1

您可以创建一个执行以下操作:

  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 容器......

于 2010-09-20T09:09:17.220 回答
0

快速浏览一下文档,似乎 ServletUnitClient 可以支持 POST 请求,以及带有 KVP 样式参数的 GET 请求,就像您现在使用的一样:http: //httpunit.sourceforge.net/doc/tutorial/task1editor-form .html

使用 XML 请求的工作方式类似于发布 HTML 表单,只是您不必在其前面有 HTML UI。

但是,我可能会将 XML 解析的单元测试分解为单独的测试,而不是通过 servlet 显式测试它。servlet 充当 XML 解析和 WFS 服务其他部分的 HTTP 前端,您应该单独对这些部分进行单元测试(也许您已经在这样做,在这种情况下忽略这部分)。

根据我的经验,测试服务的 HTTP/前端通常是最不重要的部分,它背后的逻辑更容易被破坏,因此测试更重要。此外,与前端分开测试服务逻辑通常会迫使您使用更好的设计。

当然,如果你有时间,或者前端本身涉及很多逻辑,你也应该对这部分进行单元测试。

于 2010-09-20T08:54:20.083 回答