Java 如何使用只包含xml内容的请求对servlet进行单元测试

Java 如何使用只包含xml内容的请求对servlet进行单元测试,java,web-services,unit-testing,web-applications,servletunit,Java,Web Services,Unit Testing,Web Applications,Servletunit,我正在尝试对JavaWeb服务实现进行单元测试。该服务可以接受包含KVP参数的请求,例如: 或者,它也可以接受包含XML片段的请求,例如 <?xml version="1.0" ?> <GetFeature version="1.1.0" service="WFS" maxFeatures="10000" xmlns="http://www.opengis.net/wfs" xmlns:myns="http://www.someserv

我正在尝试对JavaWeb服务实现进行单元测试。该服务可以接受包含KVP参数的请求,例如:

或者,它也可以接受包含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>

但是,我不知道如何为XML类型的请求创建相应的请求。有什么想法吗?除非绝对必要,否则我宁愿不使用另一个测试框架库

快速查看文档,ServletUnitClient似乎可以支持POST请求,也可以使用KVP样式的参数获取请求,就像您现在使用的:

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

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

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


当然,如果您不得不花时间,或者前端本身涉及很多逻辑,那么您也应该对该部分进行单元测试。

快速查看文档,ServletUnitClient似乎可以支持POST请求,以及使用KVP样式参数获取请求,就像您现在使用的:

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

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

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


当然,如果您必须按时完成,或者前端本身涉及大量逻辑,您也应该对该部分进行单元测试。

您可以创建一个应用程序,并执行以下操作:

  • 创建所需请求的XML
  • 创建MockHttpServletRequest API:

  • 调用
    setContent(xml)
    setContentType(“text/xml”)

  • 直接调用servlet方法。e、 g.
    someServlet(mockReq,mockRes)

    通过这种方式,在jUnit测试时无需启动servlet容器…

    您可以创建一个servlet容器,并执行以下操作:

  • 创建所需请求的XML
  • 创建MockHttpServletRequest API:

  • 调用
    setContent(xml)
    setContentType(“text/xml”)

  • 直接调用servlet方法。e、 g.
    someServlet(mockReq,mockRes)
    这样,在jUnit测试时就不需要启动servlet容器

     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);