【问题标题】:How can I unit test a servlet with a request that just consists of xml content如何使用仅包含 xml 内容的请求对 servlet 进行单元测试
【发布时间】:2010-07-29 16:46:01
【问题描述】:

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

【问题讨论】:

    标签: java web-services unit-testing web-applications servletunit


    【解决方案1】:

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

    1. 创建所需请求的 XML..
    2. 创建一个 MockHttpServletRequest 接口: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 容器...

    【讨论】:

      【解决方案2】:

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

      使用 XML 的请求就像发布 HTML 表单一样,只是您不必在其前面有 HTML UI。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        • 1970-01-01
        相关资源
        最近更新 更多