Как я могу модульно протестировать сервлет с запросом, который состоит только из содержимого XML - PullRequest
1 голос
/ 29 июля 2010

Я пытаюсь выполнить модульное тестирование реализации веб-службы Java WFS .Служба может принимать запросы, содержащие параметры 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>

. Я тестирую способ KVP, используяServletUnit, что прямо:

 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.Есть идеи?Я бы предпочел не использовать другую библиотеку фреймворков для тестирования без крайней необходимости.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Вы можете создать следующее:

  1. Создать XML-запрос, который вы хотите ..
  2. Создать API MockHttpServletRequest: http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mock/web/MockHttpServletRequest.html

  3. Вызовите setContent(xml); и setContentType("text/xml");

  4. Вызовите свой метод сервлета напрямую.например, someServlet(mockReq,mockRes);

Таким образом, нет необходимости запускать контейнер сервлета во время jUnit тестирования ...

0 голосов
/ 20 сентября 2010

Из быстрого просмотра документов видно, что ServletUnitClient может поддерживать запросы POST, а также запросы GET с аргументами в стиле KVP, как вы используете сейчас: http://httpunit.sourceforge.net/doc/tutorial/task1editor-form.html

Запрос с XML работает следующим образомпубликация HTML-формы, только с тем, чтобы перед ней не обязательно отображался пользовательский интерфейс HTML.

Однако я, вероятно, выбрал бы модульное тестирование синтаксического анализа XML в отдельном тесте, а не тестировал бы его.явно через сервлет.Сервлет действует как HTTP-интерфейс для синтаксического анализа XML и других частей службы WFS, и вам следует выполнить модульное тестирование этих частей по отдельности (возможно, вы уже делаете это, игнорируя эту часть в этом случае).

По моему опыту, тестирование HTTP / внешнего интерфейса службы обычно является наименее важной частью, логика, лежащая в его основе, с большей вероятностью сломается, и, следовательно, важнее тестировать.Кроме того, тестирование сервисной логики отдельно от внешнего интерфейса часто вынуждает вас использовать лучший дизайн.

Конечно, если у вас есть время или сам интерфейс использует много логики, вам следует также выполнить модульное тестирование этой части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...