Вопрос

У меня есть куча сервлетов, запущенных под контейнером сервлетов Tomcat.Я хотел бы отделить тестовый код от производственного, поэтому я решил использовать тестовый фреймворк.JUnit прекрасно интегрирован в Eclipse, но мне не удалось заставить его запускать сервлеты, используя работающий сервер Tomcat.Не могли бы вы, пожалуйста, порекомендовать платформу модульного тестирования, которая поддерживает тестирование сервлетов Tomcat?Интеграция с Eclipse приятна, но не обязательна.

Это было полезно?

Решение

Проверьте Сервлет- модуль, который является частью HttpUnit.В двух словах, ServletUnit предоставляет библиотеку макетов и утилит, которые вы можете использовать в обычных тестах JUnit для макета контейнера сервлета и других объектов, связанных с сервлетом, таких как объекты запроса и ответа.Приведенная выше ссылка содержит примеры.

Другие советы

Spring Framework имеет хорошие готовые макетные объекты для нескольких классов из Servlet API:

http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/mock/web/package-summary.html

Ладно.Игнорируя бит 'tomcat' и кодирование для сервлета, лучше всего создать mocks для объектов response и request, а затем сообщить ему, чего вы от него ожидаете.

Итак, для стандартного пустого допоста и использования Легкий доступ, у вас будет

public void testPost() {
   mockRequest = createMock(HttpServletRequest.class);
   mockResponse = createMock(HttpServletResponse.class);
   replay(mockRequest, mockResponse);
   myServlet.doPost(mockRequest, mockResponse);
   verify(mockRequest, mockResponse);
}

Затем начните добавлять код в doPost.Макеты потерпят неудачу, потому что у них нет ожиданий, и тогда вы сможете настроить ожидания оттуда.

Обратите внимание, что если вы хотите использовать EasyMock с классами, вам придется использовать библиотеку расширений классов EasyMock.Но с этого момента все будет работать точно так же.

Отделите части этого кода, которые имеют дело с HTTP-запросами и ответами, от частей, которые выполняют бизнес-логику или манипулирование базой данных.В большинстве случаев это приведет к созданию трехуровневой архитектуры с уровнем данных (для базы данных / сохраняемости), уровнем сервиса (для бизнес-логики) и уровнем представления (для HTTP-запросов и ответов).

  1. Вы можете модульно протестировать первые два уровня вообще без каких-либо элементов сервлета;таким образом, будет легче протестировать.
  2. Вы можете протестировать уровень презентации, как предполагают другие, используя фиктивные объекты HTTP-запроса и ответа.
  3. Наконец, если вы чувствуете, что это действительно необходимо, вы можете выполнять интеграционные тесты, используя инструмент, такой как HtmlUnit - модуль HtmlUnit или Веб- модуль .

Для тестирования "в контейнере" взгляните на Кактус

Если вы хотите иметь возможность тестировать без запущенного контейнера, вы можете либо смоделировать его компоненты с помощью ваших собственных mockobjects (напримерс Легкий доступ) или вы могли бы попробовать Макет бегуна который имеет "предопределенные" заглушки для тестирования сервлетов, jdbc-соединений и т.д.

Обновлено в феврале 2018 года: OpenBrace Limited закрылась, и его ObMimic-продукт больше не поддерживается.

Если вам нужна более новая альтернатива ServletUnit для тестирования сервлетов JUnit, вы можете найти у моей компании Обмимический полезная библиотека.Это доступно бесплатно на сайте Загрузки Страница.

Как и в случае с ServletUnit, он предоставляет библиотеку классов, которые вы можете использовать в обычных тестах JUnit или TestNG вне любого контейнера сервлетов для имитации Servlet API.

Его объекты Servlet API имеют конструкторы без аргументов, полностью настраиваются и проверяются на наличие всех соответствующих данных и настроек Servlet API и обеспечивают полное моделирование всего поведения, заданного javadoc в Servlet API.Чтобы помочь с тестированием, поддерживается выборочная запись вызовов Servlet API, контроль над любым зависящим от контейнера поведением, проверки на наличие любых неоднозначных вызовов (т.Е.где поведение API сервлета не определено полностью), и моделирование JNDI в памяти для любого кода сервлета, который полагается на поиск в JNDI.

Для получения полной информации, примера кода, руководств "как это сделать", Javadoc и т.д. Смотрите веб-сайт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top